にスイフトベースPKI実装の一部として、私は、スイフト実装における一部を除いて正常に動作しているキーチェーンアクセス方法のスイフトAnyObjectからのキャストエラー? SecKeyRefに?スイフト
両方、(対物-CおよびSWIFT)にSecKeyWrapper.mを移植しました。
ピアから公開鍵をbase64形式で受け取ります。これはNSDataのに変換してから使用してキーチェーンに保存されます。
statusCode = SecItemAdd(queryDictionary, &persistentPeer)
首尾キーチェーンにピアの公開鍵を保存した後、私はSecKeyRefとしてそれを取得する必要があります。
queryDictionary[kSecReturnPersistentRef] = true
var peerKeyRef: AnyObject?
statusCode = SecItemCopyMatching(queryDictionary, &peerKeyRef)
問題は、SecItemCopyMatchingはAnyObject型のオブジェクトを返しますか?仕事は私の周りに
let key = peerKeyRef as? SecKeyRef // Compile error.
SecKeyRefにキャスト(またはSecKeyのザッツは別名である)ことがcan'tより見つけNSObjectのようpeerKeyRefをキャストするのですか?その後、次のようにSecKeyに橋渡しするのObjective-Cを使用します。
let keyObject = peerKeyRef as? NSObject
keyRef = Utility.getSecKeyRefFromAnyObject(keyObject).takeRetainedValue()
それを行うにはObjetive-Cのコードを次のとおりです。この回避策を使用してSecKeyに鋳造が正常に動作します
+(SecKeyRef) getSecKeyRefFromNSObject:(id)theObject {
return (__bridge SecKeyRef)theObject;
}
(なし警告またはエラー)を予期した結果と比較します。
AnyObjectをキャストするSwiftコードには何がないと思いますか? SecKeyRefに?私はXcodeの7.3.1とスウィフト2.2
RGDS ....
こんにちは@ OOper.letキー= peerKeyRefとして! SecKeyRef? – eharo2
申し訳ありません...不完全なコメント... Thx @Oper ...それは動作します。何らかの理由で "peerKeyRef as?SecKeyRef"が失敗しますが、 "peerKeyRef as!SecKeyRef?"うまく動作します..... Thxたくさん..... – eharo2
@ eharo2、心配しないでください、私の意見では、 'as? 'は' as!'が有効な場所で動作するはずです。しかし、 "何らかの理由で"、それは動作していません。私は最新のXcode 8(ベータ4)をチェックしていませんが、最新のXcode 8で同じ動作が見つかった場合は、[Bug Report](http://developer.apple.com/bug-report /)をアップルに提出してください。 – OOPer