没有使用objective-c赋值给swift属性的setter方法
我在我的一个swift类中使用下面的代码:
import UIKit public class BRUFIMobile: NSObject { public var mobileNumber : NSString? public var provider : NSString? public var aliasName: NSString? public var aliasName_en : NSString? @objc public var isDefault: Bool public override init() { self.isDefault = false super.init() } }
我的项目包含Objective-C和Swift代码。 代码在xCode 7上正常工作,但现在通过更新到xCode 8我得到下面的错误:
No setter method 'setIsDefault:' for assignment to property
我在我的Objective-C代码中使用属性如下所示:
+ (BRUFIMobile *) convertUFIMobileToBRUFIMobile:(UFIMobile *) ufimobile { BRUFIMobile *brUFIMobile = [[BRUFIMobile alloc] init]; brUFIMobile.mobileNumber = ufimobile.number; brUFIMobile.provider = ufimobile.provider; brUFIMobile.aliasName = ufimobile.aliasName; brUFIMobile.aliasName_en = ufimobile.aliasName_en; brUFIMobile.isDefault = [ufimobile.isDefault boolValue]; return brUFIMobile; }
现在是否需要手动定义字符?
斯威夫特3testing版使领先的属性特别处理。 对于属性isDefault
,Swift生成isDefault
作为getter和setDefault:
作为setter(不是setIsDefault:
。
在您的Objective-C代码中使用setDefault:
或者使其成为计算属性并手动给出@objc
名称。
(另外)“使它成为一个计算的属性”就是这样的意思:
private var _default: Bool = false public var isDefault: Bool { @objc(isDefault) get { return _default } @objc(setIsDefault:) set { self._default = newValue } }
(更新)据我testing,这似乎工作:
@objc(isDefault) public var isDefault: Bool
比“使其成为计算属性”更简单一些。 请尝试。
(UPDATE2)
苹果的工作人员已经确认,“这是一个已知的问题,将在未来的testing版中修复:” https://github.com/apple/swift/pull/3254
这不是核心数据的情况。 但是修复程序也适用于这个问题。 (可惜的是,到目前为止,Xcode 8 beta 2并没有包含这个修补程序。)
(Update3)在Xcode 8 beta 3 Release Notes中说这个特性已经被删除,并且我已经确认没有@objc
属性,Objective-C setter setIsDefault:
可用于Bool
属性isDefault
。