从Objc向Swift库传递NSArray

问题描述 投票:0回答:1

我试图在一个客观的C项目中使用以下pods文件。

https:/cocoapods.orgpodsiOSDropDown。

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

然而,我试图在Objective c中执行以下Swift函数,但我继续收到以下错误信息。

我在Objective 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属性而不崩溃。任何帮助将是感激的。

ios objective-c swift cocoa nsarray
1个回答
0
投票

结果发现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
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.