没有 setter 分配给 属性 swift 3 和 objective-c 的方法
No setter method for assignment to property swift 3 with objective-c
我在我的 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;
}
现在是否需要手动定义 seetters?
Swift 3 beta 对前导 is
的属性进行了特殊处理。
对于 属性 isDefault
,Swift 生成 isDefault
作为 getter 和 setDefault:
作为 setter(不是 setIsDefault:
) .
在您的 Objective-C 代码中使用 setDefault:
,或者将其设为计算 属性 并手动输入 @objc
名称。
(加法)
"make it a computed property" 意思是这样的:
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
比"making it a computed property"简单一点。请尝试。
(更新 2)
Apple 员工已确认 "This is a known issue that will be fixed in a future beta:"
https://github.com/apple/swift/pull/3254
这不是核心数据案例。但此修复程序也适用于此问题。
(很遗憾,就目前而言,Xcode 8 beta 2 不包含此修复。)
(更新3)
Xcode 8 beta 3 Release Notes 中说此功能已删除,我已确认,没有 @objc
属性,Objective-C setter setIsDefault:
是适用于 Bool
属性 isDefault
.
我在我的 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;
}
现在是否需要手动定义 seetters?
Swift 3 beta 对前导 is
的属性进行了特殊处理。
对于 属性 isDefault
,Swift 生成 isDefault
作为 getter 和 setDefault:
作为 setter(不是 setIsDefault:
) .
在您的 Objective-C 代码中使用 setDefault:
,或者将其设为计算 属性 并手动输入 @objc
名称。
(加法) "make it a computed property" 意思是这样的:
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
比"making it a computed property"简单一点。请尝试。
(更新 2)
Apple 员工已确认 "This is a known issue that will be fixed in a future beta:" https://github.com/apple/swift/pull/3254
这不是核心数据案例。但此修复程序也适用于此问题。 (很遗憾,就目前而言,Xcode 8 beta 2 不包含此修复。)
(更新3)
Xcode 8 beta 3 Release Notes 中说此功能已删除,我已确认,没有 @objc
属性,Objective-C setter setIsDefault:
是适用于 Bool
属性 isDefault
.