无法在 Swift 中扩展 Objective-C 类
Posted
技术标签:
【中文标题】无法在 Swift 中扩展 Objective-C 类【英文标题】:Not able to extend an Objective-C class in Swift 【发布时间】:2016-09-01 11:50:32 【问题描述】:我在 Xcode 8.0 beta 上使用 Swift 3.0。我已经使用 pods (FMDB) 安装了一个库,现在我正在尝试快速扩展它的一个类。我可以使用扩展类中的 API,但它在运行时崩溃。
-[FMResultSet polygonsForColumnIndex:]: unrecognized selector sent to instance 0x608000056890
下面是扩展的代码:
public extension FMResultSet
public func polygons(forColumnIndex index: Int32) -> [NMAMapPolygon]
调用时会在此处崩溃:
let rs = db.executeQuery("select AsGeoJSON(geometry) from COM262_Project", withArgumentsIn: nil)
while (rs?.next())!
//Crashes here!
let polygons = rs?.polygons(forColumnIndex: 0)
注意:扩展适用于 Alamofire 等其他库。
【问题讨论】:
其余的错误说明了什么? -[FMResultSet polygonsForColumnIndex:]:无法识别的选择器发送到实例 0x608000056890 方法怎么调用? 这种似乎是 UI 问题。请仔细检查您的参考资料是否缺少/未使用的连接。 我在上面定义了一个扩展,它工作正常。我无法重现您的问题。问题出在其他地方。我知道这听起来很烦人,但鉴于我们无法重现此问题,我建议您确定此问题表现出来所需的精确步骤。例如,创建一个空白项目并添加重现问题所需的最少数量。然后,您可以共享重现问题所需的精确步骤。但在我们能够重现问题之前,很难为您提供帮助。顺便说一句,我假设您使用的是 Xcode 8 beta 6 (8S201h)? 【参考方案1】:您是否尝试将函数设置为@objc
例如
public extension FMResultSet
@objc public func polygons(forColumnIndex index: Int32) -> [NMAMapPolygon]
除此之外,您是否将构建设置 Enable Modules
更改为 Yes
.. 或者如果您使用配置文件 CLANG_ENABLE_MODULES = YES
【讨论】:
试过了,但没有成功。以上是关于无法在 Swift 中扩展 Objective-C 类的主要内容,如果未能解决你的问题,请参考以下文章
无法访问扩展 Objective-C 类的 Swift 类中的私有变量