我有一个主类,也提供了一个命名空间:
class A {
}
Run Code Online (Sandbox Code Playgroud)
和一个通过扩展添加的嵌套类(所有这些都是为了使用单独的文件):
extension A {
class B {
}
}
Run Code Online (Sandbox Code Playgroud)
我想通过扩展它来为嵌套类(B)添加功能; 我试过了:
extension A.B {
}
Run Code Online (Sandbox Code Playgroud)
我得到"'B'不是'A'的成员类型".
(我也尝试了一些不太合理的东西,但我会在这里省略它们以避免尴尬.阅读Swift文档和谷歌搜索"快速嵌套类扩展"也没有得出答案.)
知道是否以及如何实现这一目标?
更新:
感谢user3441734试用它时,此代码在单个文件(或Playground)中按预期工作!
当3个部分位于单独的文件中时仍然不起作用,可能是当前Swift编译器实现中的一个错误.我将向Apple提交一份错误报告.
我知道Swift不使用名称空间,但是这些名称是在每个模块中定义的.首先,我不太清楚如何避免名称冲突 - 随意详细说明.
不过,我的主要问题是:假设我想要一个不使用NSTreeNode的树结构,所以我创建了自己的名为"TreeNode"的类.现在让我们假设Apple决定在Swift的标准库中包含一个用于构建树的类,并且正如预期的那样,他们将其命名为"TreeNode".那么会发生什么?我的自定义TreeNode将与标准库的TreeNode冲突......在这种情况下我是否必须更改所有代码?或许Apple会承诺Swift的标准库将来不会改变?
编辑:问题在这里得到解答(感谢@Martin R的评论)
作为测试,我创建了两个框架.两个框架都包含此扩展:
public extension UIDevice {
var extraInfo: UIDeviceExtraInfo {
return UIDeviceExtraInfo()
}
}
public class UIDeviceExtraInfo {
public var prop: String = "Device1" //"Device2" is used in another framework
}
Run Code Online (Sandbox Code Playgroud)
然后我导入了两个框架并尝试打印UIDevice.currentDevice().extraInfo.prop.Swift编译器给出错误:Ambiguous use of extraInfo".
如何解决这样的名字冲突?
我正在Swift中编写一个iOS应用程序,我正在试图弄清楚如何将项目组织成单独的模块.我正在使用MVVM架构,我想让Model,ViewModel和View组件分开Swift模块,这些模块只能使导入它们的模块可以访问它们自己的子集.View中的文件将导入ViewModel,ViewModel中的文件将导入Model.我怎么能做到这一点?请注意,我不是要创建多个应用程序可以共享的库.我只是想使用模块强制分离组件.
编辑:也许问题是,"我应该使用什么机制来创建模块,而不是初始iOS应用程序项目附带的模块?"
"如何在Swift中使用命名空间?"中的答案之一 /sf/answers/1682300231/说,"类(等)是由它们所在的模块(Xcode目标)隐式确定的." 由此可以得出结论,目标对应于模块,答案是在Xcode项目中创建单独的目标,但我之前尝试过,而tskulbru说我需要多个Xcode项目.
关于多个Xcode项目,文件>新建>项目> iOS框架和库> Cocoa Touch Framework选项看起来不正确,因为它应该用于使用UIKit的东西,我想要创建的两个模块不应该依赖在UIKit上.另一个"框架和库"选项,Cocoa Touch静态库,不是Swift的选项.
使用私有Pod提到的另一个StackOverflow帖子.花了一个小时研究之后,我得出结论认为这不是正确的解决方案,因为我不应该在不同的工作空间中编辑这些模块.
我可以有一个与 Core Data 对象类型同名的结构吗?如果是这样,我如何在代码中区分两者?
编辑:例如,我有一个Track核心数据对象,当我从外部读取“跟踪”信息时,它是通过 json 传入的。我没有使用核心数据对象,因为它是一个托管对象,所以我使用了另一种结构。我也打算命名它Track,但是这可能会导致我不确定的冲突,所以目前我TrackStruct改为调用它。另外,这是正确的方法吗?
谢谢!
我需要在 swift 5 中使用两个同名的类。为此,我在两个不同的模块中创建了这两个类,但我对如何在一个中使用这两个类感到困惑 UIViewController
我的一个班级Person在models>student模块中,另一个班级Person在models模块中
我试过导入类
import class models.student.Person
class BookViewController: UIViewController {
var students:[Person] = [] //it should call models.student.Person
var people: [Person] = [] //it should call models.Person
...
Run Code Online (Sandbox Code Playgroud)
但上面的 Person 类只是指向models.Person,它不是指向models.student.Person
模型中的 Person 类 > Person.swift 是
import Foundation
// MARK: - Person
public struct Person: Codable {
public let firstName: String?
public let lastName: String?
public let address: String?
public let phone: …Run Code Online (Sandbox Code Playgroud)