Ios 为什么Swift类的扩展名在定义文件外不可见?

Ios 为什么Swift类的扩展名在定义文件外不可见?,ios,swift,visibility,nsmanagedobject,Ios,Swift,Visibility,Nsmanagedobject,我为我的CoreData模型生成了一个Xcode生成的NSManagedObject类 @objc(SomeClass) class SomeClass : NSManagedObject { /* ... */ } 它在名为“SomeClass.swift”的文件中定义。我想扩展这个类,所以我创建了“SomeClassExtension.swift”。我对扩展的定义如下: extension SomeClass { class func typeMethod1() {} fu

我为我的CoreData模型生成了一个Xcode生成的NSManagedObject类

@objc(SomeClass) class SomeClass : NSManagedObject { /* ... */ }
它在名为“SomeClass.swift”的文件中定义。我想扩展这个类,所以我创建了“SomeClassExtension.swift”。我对扩展的定义如下:

extension SomeClass {
    class func typeMethod1() {}
    func instanceMethod2() {}
}

这些扩展方法可以在此定义文件中使用,但在其外部不可见。导致此问题的原因是什么?

听起来您的新文件(SomeClassExtension.swift)没有包含在正确的目标中。通过在Xcode中选择文件,然后打开“文件检查器”(查看菜单>实用程序>显示文件检查器),再次检查文件的目标成员身份。确保在目标成员资格标题下选中了正确的目标。

我在这些方法上没有看到任何公共修饰符。

默认情况下,Swift中的所有内容都是“内部”的,因此,一个文件中的声明应该对另一个文件中的代码可见,只要它们是同一构建目标的一部分。是的,这实际上是一个公平的观点。如果所有东西都在同一个目标中,那就是。@NateCook嗨,Nate。那么,有没有一种方法可以像在Objective-C中那样,通过将内容只放在.m文件中来隐藏Swift中的定义和实现细节(对于
var
s ad方法)?谢谢。@Unheilig Swift具有基于文件和模块的访问控制,具有
公共
内部
、和
私有
修改器,这与头文件的方法截然不同。您可以在@NateCook Right;我在发帖后记得。我问得太累了。非常感谢您的回复。我最终取消了目标并重新检查了它。这为我解决了问题。有人知道问题出在哪里了吗?我收到了相同的错误,但是我的应用程序编译时发现了错误,因为它在编译过程中消失了。非常奇怪和烦人(Xcode 7.1.1)。怪异;必须是一个索引问题;从AppDelegate调用扩展中的一个函数后,错误消失在使用函数的其他地方-我现在可以从任何地方点访问它们。这是一个非常有用的解决方案。对我来说,这个问题是通过解决版本控制系统中的冲突而产生的。合并两个文件时,碰巧主目标中没有包含我的文件。