Ios 使用objective-c分配到属性swift 3的无设置器方法
我在我的一个swift课程中使用以下代码:Ios 使用objective-c分配到属性swift 3的无设置器方法,ios,swift3,xcode8,Ios,Swift3,Xcode8,我在我的一个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
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;
}
现在是否有必要手动定义Seetter?Swift 3 beta对具有前导
is
的属性进行特殊处理。
对于属性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
}
}
(更新) 据我测试,这似乎是可行的:
@objc(isDefault) public var isDefault: Bool
比“使其成为计算属性”简单一点。请试一试
(更新2) 苹果公司的工作人员已经确认“这是一个已知的问题,将在未来的测试版中修复:” 这不是一个核心数据案例。但解决方案也适用于这个问题。 (遗憾的是,到目前为止,Xcode 8 beta 2不包括此修复。)
(更新3)
Xcode 8 beta 3发行说明中说,此功能已被删除,我已确认,由于没有
@objc
属性,Objective-C settersetIsDefault:
可用于Bool
属性isDefault,我不理解这一部分:“将其设为计算属性并手动指定@objc名称。”请你再详细说明一下好吗?@HuseinBehboodiRad在我的回答中加了一个例子。