2016-07-02 27 views
2

我在我迅速的一個類使用下面的代碼:沒有用於分配setter方法財產迅速3 Objective-C的

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; 
} 

是現在neccessary手動定義字符?

回答

5

斯威夫特3測試版對領先is的房產進行特殊處理。 對於物業isDefault,Swift生成isDefault作爲獲取者和setDefault:作爲設置者(不是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 

比「使之成爲計算屬性」更簡單一些。請嘗試。


(UPDATE2)

蘋果工作人員已證實,「這是一個已知的問題,將被固定在未來的測試:」 https://github.com/apple/swift/pull/3254

這不是一個核心數據的情況。但修復程序也適用於此問題。 (這是一個遺憾,因爲就目前而言,Xcode中8 beta 2版本中不包括此修復程序。)

它在Xcode 8的測試版說3發行說明此功能被刪除,我有

(UPDATE3)確認沒有@objc屬性,Objective-C設置器setIsDefault:可用於Bool屬性isDefault

+0

我不明白這部分:「使它成爲一個計算屬性並手動給出@objc名稱。」請你詳細說明一下? –

+0

@HuseinBehboodiRad,在我的回答中增加了一個例子。 – OOPer