2017-03-09 8 views
0

NSNumberオブジェクトを作成しようとしています。このコードは、SWIFT 3に相当しますどのようにSwift 3 NSNumberオブジェクトの作成

@property (nonatomic, assign) Enum someEnum; 

static NSString *const value_type = @"type"; 

- (id)initWithDictionary:(NSDictionary *)dict andUID:(int)uid { 
    self.someEnum = [[dict objectForKey:value_type] integerValue]; 
    } 

- (NSDictionary *)serializeToDictionary { 
    dict[value_type] = [NSNumber numberWithInteger:self.someEnum]; 
} 

: 私はにObjCでこのコードを持っていますか? NSNumberにはinit(value:)というシンボルがありますが、オブジェクトを初期化して作成して初期化するのではないことがわかりました。 init(value:)はエラーを投げます。これは "value"を "coder"に変更することを示唆しています。 マイスウィフトコード:

var someEnum = Enum.self 

let value_type: NSString = "type" 

init(dictionary dict: NSDictionary, andUID uid: Int) { 
    self.someEnum = dict.object(forKey: value_type) as! Enum.Type 
} 

func serializeToDictionary() -> NSDictionary { 
    dict[value_type] = NSNumber.init(value: self.someEnum) 
} 

のObjective-Cヘッダファイル:

typedef enum { 
    EnumDefault = 0, 
    EnumSecond = 1 
} Enum; 

static NSString *const value_type = @"type"; 

@property (nonatomic, assign) Enum someEnum; 

オブジェクティブCの実装ファイル:

- (id)initWithDictionary:(NSDictionary *)dict andUID:(int)uid { 
    if(self = [super init]) { 
    self.someEnum = [[dict objectForKey:value_type] integerValue]; 
    } 
    return self 
} 

- (NSDictionary *)serializeToDictionary { 
    NSMutableDictionary *dict = [NSMutableDictionary dictionary]; 
    dict[value_type] = [NSNumber numberWithInteger:self.someEnum]; 

    return dict; 
} 

答えて

1
var someEnum = Enum.self 

someEnumの値はタイプではありません特定の値。それがあなたの最初のエラーです。

あなたは今

dict[value_type] = NSNumber.init(value: self.someEnum) 

列挙型は自動的にint型に変換されていない、おそらく

var someEnum: Enum = ... // (your default value) 

ような何かをしたいです。 EnumIntの値に基づいていると仮定しましょう(これはすべての列挙体に当てはまりません)。あなたが使用することができますより:

dict[value_type] = NSNumber(value: self.someEnum.rawValue) 

か、単に

dict[value_type] = self.someEnum.rawValue as NSNumber 

全コード(それはスウィフトと私は!がより良い解決されなければならない使用して解決し、例外状態にNS(Mutable)Dictionaryを使用するのは良い考えではありません)。

enum Enum : Int { 
    case `default` = 0 
    case second = 1 
} 

class Test { 
    var someEnum: Enum = .default 
    let valueType: String = "type" 

    init(dictionary: NSDictionary, andUID uid: Int) { 
     self.someEnum = Enum(rawValue: (dictionary[valueType] as! NSNumber).intValue) ?? .default 
    } 

    func serializeToDictionary() -> NSDictionary { 
     let dictionary = NSMutableDictionary() 
     dictionary[valueType] = self.someEnum.rawValue as NSNumber 

     return dictionary 
    } 
} 
+0

My EnumはInt型です。私はあなたのコードを試しましたが、それは言う - タイプ "Class.Enum.RawValue.Type(別名Int.Type)の型変換にNSNumberを変換することはできません –

+0

@ KasparsLapinsあなたはトップに"最初のエラー "コメントを得ましたか? – Sulthan

+0

プロジェクトはこのコードでコンパイルしますが、同じことをしますか?dict [value_type] = self.someEnum.rawValue()as NSNumber –

関連する問題