【问题标题】:element as AnyObject vs element vs AnyObject?元素作为 AnyObject vs 元素 vs AnyObject?
【发布时间】:2018-10-27 16:44:18
【问题描述】:

阅读 Apple 的代码我看到了以下内容(谈论 Keychain 服务):

query[kSecAttrService as String] = service as AnyObject?

AnyObject?的目的是什么?

我认为可以简化为

query[kSecAttrService as String] = service as AnyObject

有什么线索吗?

这是来自 Apple 示例的整个 sn-p:

private static func keychainQuery(withService service: String, account: String? = nil, accessGroup: String? = nil) -> [String : AnyObject] {
    var query = [String : AnyObject]()
    query[kSecClass as String] = kSecClassGenericPassword
    query[kSecAttrService as String] = service as AnyObject?

    if let account = account {
        query[kSecAttrAccount as String] = account as AnyObject?
    }

    if let accessGroup = accessGroup {
        query[kSecAttrAccessGroup as String] = accessGroup as AnyObject?
    }

    return query
}

【问题讨论】:

  • 谁说 Apple 的样本必须包含完美无瑕的代码?

标签: swift casting optional keychainitemwrapper


【解决方案1】:

也许 sn-p 来自一些 Swift 2 代码,在 Swift 3+ 中是

private static func keychainQuery(withService service: String, account: String? = nil, accessGroup: String? = nil) -> [String : Any] {
    var query = [String : Any]()
    query[kSecClass as String] = kSecClassGenericPassword
    query[kSecAttrService as String] = service

    if let account = account {
        query[kSecAttrAccount as String] = account
    }

    if let accessGroup = accessGroup {
        query[kSecAttrAccessGroup as String] = accessGroup
    }

    return query
}

【讨论】:

  • 您已从 AnyObject 移至 Any。你能告诉我为什么吗?
  • 因为在 Swift 3+ 中,未指定的值类型是 Any,未指定的引用类型是 AnyObject。查询字典只包含值类型。
猜你喜欢
  • 2015-02-15
  • 1970-01-01
  • 1970-01-01
  • 2016-08-15
  • 1970-01-01
  • 2015-11-24
  • 2015-05-07
  • 1970-01-01
相关资源
最近更新 更多