作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
处理一些 objC API,我收到一个 NSDictionary<NSString *, id> *>
转换为 [String : Any]
在 Swift 中,我将其用于 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
有an initialiser that takes a String
, 你可以使用 Dictionary
的 init(uniqueKeysWithValues:)
初始化器,以便从一系列键值元组构建字典,其中每个键都是唯一的(例如这里的情况)。
我们只需要对 attr
应用转换转换每个 String
键入 NSAttributedStringKey
在打电话之前 Dictionary
的初始化程序。
例如:
let attributes: [String : Any]? = // ...
let attributedString = NSMutableAttributedString(string: "hello world")
let range = NSRange(location: 0, length: attributedString.string.utf16.count)
if let attributes = attributes {
let convertedAttributes = Dictionary(uniqueKeysWithValues:
attributes.lazy.map { (NSAttributedStringKey($0.key), $0.value) }
)
attributedString.addAttributes(convertedAttributes, range: range)
}
我们正在使用 lazy
在这里避免创建不必要的中间数组。
关于swift - 如何转换 [String : Any] to [NSAttributedStringKey : Any],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44407840/
我是一名优秀的程序员,十分优秀!