【问题标题】:Passing an NSArray from Objc to Swift Library将 NSArray 从 Objc 传递到 Swift 库
【发布时间】:2020-09-21 06:34:40
【问题描述】:

我正在尝试在一个目标 c 项目中使用以下 pods 文件:

https://cocoapods.org/pods/iOSDropDown

我已经修改了 coco 文件以确保所有属性都是公开的并且有 @objc 标签

但是,我尝试在 Objective c 中执行以下 Swift 函数,但我继续收到以下错误消息:

我试图在目标 c 中执行的 Swift 代码

dropDown.optionArray = ["Option 1", "Option 2", "Option 3"]

objc 代码

NSArray * stringArray = @[@"Option 1", @"Option 2", @"Option 3"];
[_dropDown setOptionArray: stringArray];

我继续收到以下错误:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[iOSDropDown.DropDown setOptionArray:]: unrecognized selector sent to instance 0x7f8a90048800'

我知道 NSArray 是一个 coco 特定对象,应该在 swift 和 objc 之间传输,但我不确定为什么我无法设置 optionArray 属性而不崩溃。任何帮助将不胜感激。

【问题讨论】:

  • 您是否尝试改用dropDown.setOptionsArray(["Option 1", "Option 2", "Option 3"])
  • 感谢您回复 moe,但该语法很快,我在 obj c 中尝试了等效,但我收到相同的错误消息 [_dropDown setOptionArray: @[@"1", @"2", @" 3"]];
  • 你的合成方法工作正常吗?如果数组属性不是只读的,您可以尝试从 objc 设置它:dropDown.optionArray = @[ ... ];

标签: ios objective-c swift cocoa nsarray


【解决方案1】:

原来 swift 对象是一个数组而不是 NSArray。我对此的解决方案是在 swift 中创建一个辅助变量,它接受一个 NSArray 并在 swift 中设置 optionArray var:

@IBInspectable public var arraySetter = NSArray() {
    didSet{
        let objCArray = NSMutableArray(array: self.arraySetter)

        if let swiftArray = objCArray as NSArray as? [String] {
            // Use swiftArray here
            self.optionArray = swiftArray
        }
    }
}

【讨论】:

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