我使用Swift转换Keychain查询结果.
我的请求似乎正在起作用:
let queryAttributes = NSDictionary(objects: [kSecClassGenericPassword, "MyService", "MyAccount", true],
forKeys: [kSecClass, kSecAttrService, kSecAttrAccount, kSecReturnData])
dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), {
var dataTypeRef : Unmanaged<AnyObject>?
let status = SecItemCopyMatching(queryAttributes, &dataTypeRef);
let retrievedData : NSData = dataTypeRef!.takeRetainedValue() as NSData
*** ^^^^can't compile this line^^^^
})
Run Code Online (Sandbox Code Playgroud)
我的问题是,代码无法编译:
Bitcast requires both operands to be pointer or neither
%114 = bitcast %objc_object* %113 to %PSs9AnyObject_, !dbg !487
Bitcast requires both operands to be pointer or neither
%115 = bitcast %PSs9AnyObject_ %114 to i8*, !dbg !487
LLVM …Run Code Online (Sandbox Code Playgroud) 现在,Swift 4可以更轻松地对JSON或属性列表进行编码/解码.
但是我找不到如何使用Codable对Data进行编码,而不使用Objective-C方法initWithCoder和encodeWithCoder.
考虑这个简单的类:
struct Question: Codable {
var title: String
var answer: Int
var question: Int
}
Run Code Online (Sandbox Code Playgroud)
我怎么能对数据进行编码来使用CodingKeys,而不是initWithCoder和encodeWithCoder?
编辑:我还需要能够使用NSKeyedArchiver反序列化以前保存在userdefaults中的对象.