2016-07-02 7 views
2

ich Code unten in einen meiner schnellen Klassen verwenden:Keine Setter-Methode für die Zuordnung zu Immobilien swift 3 mit 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() 
    } 

} 

Mein Projekt enthält sowohl Objective-c und schnelle Codes. Der Code funktioniert auf xCode 7 in Ordnung, aber jetzt durch die Aktualisierung auf xCode 8 I unten Fehlermeldung erhalten:

No setter method 'setIsDefault:' for assignment to property 

ich das Attribut in meinem Objective-C-Code verwenden, wie unten:

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

ist es jetzt notwendig Setter manuell definieren?

Antwort

5

Swift 3 Beta macht spezielle Behandlung für Eigenschaften mit führenden is. Für die Eigenschaft isDefault generiert Swift isDefault als Getter und setDefault: als Setter (nicht setIsDefault:).

Verwenden Sie in Ihrem Objective-C-Code setDefault:, oder erstellen Sie eine berechnete Eigenschaft, und geben Sie @objc Namen manuell ein.


(Addition) "es eine berechnete Eigenschaft machen" bedeutet so etwas wie dieses:

private var _default: Bool = false 
public var isDefault: Bool { 
    @objc(isDefault) get { 
     return _default 
    } 
    @objc(setIsDefault:) set { 
     self._default = newValue 
    } 
} 

(Update) Soweit ich getestet, scheint dies zu funktionieren:

@objc(isDefault) public var isDefault: Bool 

Ein bisschen einfacher als "es eine berechnete Eigenschaft zu machen". Bitte versuche.


(Update2)

Apple-Mitarbeiter hat bestätigt, dass "Dies ist ein bekanntes Problem, das in einem zukünftigen Beta behoben werden:" https://github.com/apple/swift/pull/3254

Dies ist kein Core Data Fall. Aber das Update wird auch für dieses Problem funktionieren. (Es ist schade, wie jetzt, Xcode 8 Beta 2 enthält nicht dieses Update.)


(Update3) Es in Xcode 8 Beta gesagt 3 Release Notes, dass diese Funktion entfernt wird, und ich habe bestätigt, dass ohne @objc Attribut Objective-C-Setter setIsDefault: für Bool Eigenschaft isDefault verfügbar ist.

+0

Ich verstehe diesen Teil nicht: "machen Sie es zu einer berechneten Eigenschaft und geben Sie @objc Namen manuell." Kannst du es bitte mehr angeben? –

+0

@HuseinBehboodiRad, Hinzugefügt ein Beispiel in meiner Antwort. – OOPer