SwiftでCFDictionary
2021/01/12
SwiftはObj-Cに比べてより柔軟な書き方ができる反面、最適な書き方がよく分からない場合がある。省略できたりできなかったり。例えばCFDictionaryの場合。
よく見かけるコード
func clear() {
let query: [String: Any] = [
kSecClass as String: kSecClassGenericPassword
]
SecItemDelete(query as CFDictionary)
}
しかし、キーのStringキャストは消せる
func clear() {
let query: [CFString: Any] = [
kSecClass: kSecClassGenericPassword
]
SecItemDelete(query as CFDictionary)
}
本当はこうしたいがエラーになる
func clear() {
// Contextual type 'CFDictionary' cannot be used with dictionary literal
let query: CFDictionary = [
kSecClass: kSecClassGenericPassword
]
SecItemDelete(query)
}
こうすると一番マシかも
func clear() {
let query = [
kSecClass: kSecClassGenericPassword
] as CFDictionary
SecItemDelete(query)
}
ちなみにSwift 4.2