【发布时间】:2015-12-18 10:33:26
【问题描述】:
使用混合框架。在 Obj-C 文件中导入,但内部类不可见,只有公共类。
文档明确指出 Swift 和 Obj-C 之间应该可以使用内部类:
将 Swift 导入到 Objective-C
要将一组 Swift 文件导入到与 Objective-C 代码相同的框架目标中,您不需要 需要将任何内容导入框架的伞头文件中。 相反,为您的 Swift 代码导入 Xcode 生成的头文件 到任何你想从中使用 Swift 代码的 Objective-C .m 文件中。 因为为框架目标生成的标头是 框架的公共接口,只有标有公共的声明 修饰符出现在为框架目标生成的标头中。 你 仍然可以使用标有 来自框架的 Objective-C 部分的内部修饰符, 只要它们是在继承自 Objective-C 类。有关访问级别修饰符的更多信息,请参阅 Access Control 在The Swift Programming Language (Swift 2)。
代码示例(使用框架创建新项目)
// SwiftObject.swift
public class SwiftObject: NSObject {
public class func doSomething() {}
}
internal class YetAnotherSwiftObject: NSObject {
internal class func doSomething() {}
}
// SomeObject.m file
@implementation SomeObject
- (void)someMethod {
[SwiftObject doSomething];
}
- (void)someOtherMethod {
[YetAnotherSwiftObject doSomething]; // Use of undeclared identifier
}
@end
【问题讨论】:
-
当前文档developer.apple.com/documentation/swift/… 说 使用 internal 修饰符标记并在继承自 Objective-C 类的类中声明的方法和属性可供 Objective-C 运行时访问。 但是,它们在编译时不可访问,并且不会出现在为框架目标生成的标头中。
标签: ios objective-c swift frameworks access-modifiers