2016-05-20 19 views
0

私はKeychainラッパークラスのSwift版で作業しています。私はこの作品、なぜ少し困惑だ:一般的なメソッドは、 "AnyObject型の不変の値をinout引数として渡せません"

private func executeFetch(query: KeyStoreObject) throws -> AnyObject? { 
    var result: AnyObject? 
    try executeQuery(query) { SecItemCopyMatching(query.data, &result) } 
    return result 
} 

そして、これはそうではない:

private func executeFetch<T: AnyObject>(query: KeyStoreObject) throws -> T? { 
    var result: T? 
    try executeQuery(query) { SecItemCopyMatching(query.data, &result) } 
    return result 
} 

答えて

0

私はで何すなわち(エラーがSecItemCopyMatchingがタイプAnyObjectの何かを割り当てることを試みることができるということであると信じていますすべて)をresultに設定します。しかし、第2の例ではresultは必ずしもタイプAnyObjectである必要はありません。 AnyObjectのサブクラスである特定のタイプのTです。したがって、SecItemCopyMatchingが正しく設定されない可能性があります。resultたとえば、TIntの場合、SecItemCopyMatchingはをStringに設定しますか? resultがタイプAnyObjectの場合、これはもはや問題ではありません。

+0

ありがとうございます。基本的には、どのオブジェクトタイプを返す場合でもSecItemCopyMatchingを制限しています。 – Zyphrax

関連する問題