通用方法导致 "cannot pass immutable value of type AnyObject? as inout argument"

Generic method causes "cannot pass immutable value of type AnyObject? as inout argument"

我正在开发 Swift 版本的钥匙串包装器 class。我有点困惑为什么会这样:

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
}

我认为错误是 SecItemCopyMatching 可能会尝试将 AnyObject 类型的任何东西(即任何东西)分配给 result。然而,在第二个例子中 result 不一定是 AnyObject 类型;它是某种特定类型 T,是 AnyObject 的子类。因此,SecItemCopyMatching可能无法正确设置result。例如,如果 TInt,但是 SecItemCopyMatching 想将 result 设置为 String 怎么办?当 resultAnyObject 类型时,这不再是问题。