blo*_*ilk 7 objective-c ios swift
我正在尝试编译以下Swift类:
class Waypoint: NSObject {
dynamic var coordinate: CLLocationCoordinate2D?
}
Run Code Online (Sandbox Code Playgroud)
但是我得到以下编译器错误:
属性不能标记为动态,因为其类型无法在Objective-C中表示
如果我改为coordinate
非可选,一切正常.我认为这是有道理的,因为Objective-C没有可选项的概念.有没有已知的解决方案或解决方法?
Jea*_*let 13
在Objective-C中,您可以使用nil
信号表示缺少值,但仅限于对象类型.Swift使用Optional
泛型类型来概括它(并使其类型安全):你可以有一个Optional<NSObject>
,也就是说NSObject?
,你也可以有一个Int?
或一个CLLocationCoordinate2D?
.
但是CLLocationCoordinate2D
是一个结构 - 如果你在Objective-C中使用它,你就不能分配nil
给一个类型的变量CLLocationCoordinate2D
.这就是您收到此错误的原因.
至于(丑陋的)解决方法,你可以包装CLLocationCoordinate2D
一个对象:
class CLLocationCoordinate2DObj: NSObject {
let val: CLLocationCoordinate2D
init(_ val: CLLocationCoordinate2D) {
self.val = val
}
}
class Waypoint: NSObject {
dynamic var coordinate: CLLocationCoordinate2DObj?
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,你找不到一个更通用的解决方案,它有一个结构的通用对象包装类,因为Objective-C没有泛型...另一种方法是使用这里描述的NSValue
对象类型,但我怀疑它会是更优雅.
归档时间: |
|
查看次数: |
3053 次 |
最近记录: |