处理一些 objC API 时,我收到一个
NSDictionary<NSString*,id> *>
,在 Swift 中翻译为[String: Any]
,我将其用于NSAttributedString.addAttributes:range:。然而,Xcode 9 中这个方法签名已经改变,现在需要一个[NSAttributedStringKey : Any]
。let attr: [String : Any]? = OldPodModule.getMyAttributes()
// Cannot assign value of type '[String : Any]?' to type '[NSAttributedStringKey : Any]?'
let newAttr: [NSAttributedStringKey : Any]? = attr
if let newAttr = newAttr {
myAttributedString.addAttributes(newAttr, range: range)
}
如何将[String : Any]
转换为[NSAttributedStringKey : Any]
?
[NSAttributedStringKey : Any]
到[String : Any]
),在这种情况下,代码是Dictionary(uniqueKeysWithValues: attr.lazy.map { ($0.key.rawValue, $0.value) })
。 - Cœurlazy
?在这种情况下,attr.map { /* ... */ }
不是也可以吗? - Matusalem Marqueslazy
可以避免创建不必要的中间数组(键值对只被迭代一次并插入到新字典中,应用给定的转换)。 - Hamish