我正在完成一个用Swift编写的项目的移植,以支持Objective-C。编写了很多项目来支持Objective-C,但不支持特定类的属性。
这是属性:
open var remainingTime: ( hours: Int, minutes: Int, seconds: Int)?
我猜我不能只添加@objc
,因为“ hours”,“ minutes”,“ seconds”是对象。如何使此属性对我的Objective-C项目可见?
答案 0 :(得分:4)
您可以创建一个表示元组的类。
代码:
class Time: NSObject {
let hours: Int
let minutes: Int
let seconds: Int
init(hours: Int, minutes: Int, seconds: Int) {
self.hours = hours
self.minutes = minutes
self.seconds = seconds
}
}
@objc open var remainingTime: Time?
答案 1 :(得分:0)
当我尝试通过KVO观察枚举时,此错误发生在项目中。我的枚举看起来像这样:
enum EnumName: String {
case one = "One"
case two = "Two"
}
如果您要努力观察它,此解决方法有助于解决我的问题。
@objc dynamic var observable: String?
像这样创建您的枚举实例:
private var _enumName: EnumName? {
didSet {
observable = _enumName!.rawValue
}
}
private var _enumName: EnumName?
private let _instance = ObservableClass()
创建
private var _enumObserver: NSKeyValueObservation = _instance.observe(\.observable, options: .new, changeHandler: { [weak self] (_, value) in
guard let newValue = value.newValue else { return }
self?._enumName = EnumName(rawValue: period)!
})
比。现在,每次您更改可观察类中的_enumName
时,观察者类上的相应实例也会立即更新。
这当然是一个简化的实现,但是它应该使您了解如何观察KVO不兼容的属性。