在 Swift 中为 Objective C 函数提供 NSMutableArray 类型
Posted
技术标签:
【中文标题】在 Swift 中为 Objective C 函数提供 NSMutableArray 类型【英文标题】:Supplying NSMutableArray type to Objective C function in Swift 【发布时间】:2014-06-03 18:40:57 【问题描述】:我有一个用Objective C 编写的库函数,它有一个指向NSMutableArray 的指针。但是,当我尝试使用 Swift 数组调用它时,会出现以下错误:
DiscoverViewController.swift:34:20: Could not find an overload for 'init' that
accepts the supplied arguments
但是,如果我通过 nil
,它会起作用。这是有道理的。
这是一个 Objective-C 的例子:
int ex:(NSMutableArray *)in return in.count;
还有一个 Swift 的例子:
ex([1,2,3,4]) // doesn't compile
ex(nil) // does compile
如何将 Swift 数组转换/转换为我的库函数正在寻找的 NSMutableArray 类型?
这是完整的方法签名,以防我的示例过于简化:
- (id) initWithTitle: (NSString *) title place: (PublicPlaceInfo *) place
datetimeInterval: (DateTimeInterval *) datetimeInterval costBracket: (int)
costBracket creatorId: (PersonID) creatorId cover: (Url) cover experienceId:
(ExperienceID) experienceId numJoined: (int32_t) numJoined relatedJoined:
(NSMutableArray *) relatedJoined;
然后我知道它在relatedJoined 部分失败了,因为我将所有其他潜在的匿名实例化转换为变量。不得不说,这肯定不是最有用的编译错误..
【问题讨论】:
【参考方案1】:ex([1,2,3,4]) // doesn't compile
这是因为您传递给它的是一个普通数组,而不是一个可变数组。尝试先将其转换为可变数组:ex(NSMutableArray([1,2,3,4]))
ex(nil) // does compile
nil
是 NSMutableArray?
的有效参数,这就是它起作用的原因。
【讨论】:
好的,那么我让relatedJoined 参数等于var mutArr = [1,2,3,4]
,它仍然无法编译。但是根据文档,声明为“var”(而不是“let”)的数组是可变数组。
@phileaton: Swift 的Array
和NSArray
不一样。 Docs reference 将 Swift 中的数组视为 SWArray :-)
哈哈好吧,我想我只是很失望没有原生支持,因为 NSArray 和 NSMutableArray 在 Objective-C 中是如此基础。以上是关于在 Swift 中为 Objective C 函数提供 NSMutableArray 类型的主要内容,如果未能解决你的问题,请参考以下文章
从 Swift 调用 Objective C 和 C 传递回调函数
使用 Swift 语言编写递归函数以遍历 Objective C 中的 Collection 对象