【问题标题】:Swift doesn't pickup NSMutableArray type annotation from frameworkSwift 不会从框架中获取 NSMutableArray 类型注释
【发布时间】:2016-06-24 19:27:34
【问题描述】:

我在 objC 中创建了一个框架,并在主项目的 Swift 文件中为一个类创建了一个扩展。 我已将类(在框架中)注释如下:

@interface GerberStepAndRepeat : GerberElement <GerberBlock>
@property (nonatomic,strong,nonnull) NSMutableArray<GerberLevel *> *levels;
@end

在 Swift 中,我按如下方式访问 levels 属性:

extension GerberStepAndRepeat {
    func flatten() {
        for level in self.levels {
        }
    }
}

然后将levels 属性键入为NSMutableArray,并将level 变量键入为Element

为什么不显示我在框架中指定的类型?是否需要调整任何设置才能使其正常工作?

【问题讨论】:

    标签: objective-c swift macos


    【解决方案1】:

    来自Interacting with Objective-C APIs(已添加重点):

    NSArrayNSSetNSDictionary 类型的 Objective-C 声明 使用轻量级泛型参数化由 Swift 导入 有关保留内容类型的信息。
    ...
    除了这些 Foundation 集合类之外,Objective-C 轻量级泛型被 Swift 忽略。 任何其他类型使用 轻量级泛型被导入到 Swift 中,就好像它们是 未参数化。

    NSMutableArray 不在 Foundation 类型列表中 Swift 中保留了轻量级的泛型参数化。

    示例:Objective-C 属性

    @property(strong, nonatomic, nonnull) NSArray<NSString *> *anArrayProperty;
    @property(strong, nonatomic, nonnull) NSMutableArray<NSString *> *aMutableArrayProperty;
    

    由 Swift 导入(如您所见,使用 Xcode 菜单中的“Navigate -> Jump to Generated Interface”)

    public var anArrayProperty: [String]
    public var aMutableArrayProperty: NSMutableArray
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多