2016-08-25 7 views
0

私は、目的関数cからbridgingを使ってswift関数を呼び出しています。また、キーと値のペアを持つNSMutableDictionaryを渡します。 1つの値(op_status)は、呼び出し側でそのままではあるが、受信時にnullになります。アタッチコード:Objective CからSwift関数を呼び出している間、辞書がキャストされていない

NSMutableDictionary *offlineRequestData = [NSMutableDictionary dictionaryWithObjectsAndKeys: 
soId, @"soId", 
AddNoteScreen, @"screen", 
NotesOperation, @"operation", 
jsonBlob, @"jsonBlob", 
createdDate, @"created_datetime", 
[NSNumber numberWithInt:OperationNotSynced], @"op_status", 
@"", @"sync_datetime", nil]; 

// OperationNotSyncedは列挙型です。辞書

newRecord.op_status = valuesDictionary["op_status"] as? NSNumber 

op_statusがここにnullを取得します使用しています //内部スウィフト機能:スウィフト側

// -

また、valuesDictionary ["op_status"]を出力すると、オプションの(int値)が返され、アンラッピングによって値が出力されます。しかし、NSNumberにキャストできません。

何か助けていただければ幸いです。

答えて

1

op_statusInt?ですので、条件付きでIntにキャストして、イニシャライザでNSNumberを作成してください。

if let opStatusInt = valuesDictionary["op_status"] as? Int { 
    newRecord.op_status = NSNumber(value: opStatusInt) 
} 
+0

op_statusはNSNumberである必要がありますか? Intではなく?右 ?私はこれをやっているのですか?: [NSNumber numberWithInt:OperationNotSynced]。 – ofeida

+0

Swiftは自動的にそれをあなたのために 'Int'にキャストします。 Swiftは、NSNumberのような旧式のObjective-C型より新しいFoundation型を使用することを望みます。残念ながら、CoreDataのようなものはまだNSNumberに依存しています。 Swiftコンパイラ/タイプシステムでこれらのゲームをプレイしなければならないことがあります。 – keithbhunter

+0

試してみましたが、valuesDictionary ["op_status"]がIntにキャストされていませんか?また、それを印刷するとオプション(1)(または他の値)が表示されます。 – ofeida

関連する問題