Cœu*_*œur 2 nsattributedstring swift swift4
处理一些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)
}
Run Code Online (Sandbox Code Playgroud)
如何将a转换[String : Any]为[NSAttributedStringKey : Any]?
Ham*_*ish 14
NSAttributedStringKey有一个初始化器,需要一个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)
}
Run Code Online (Sandbox Code Playgroud)
我们在lazy这里使用以避免创建不必要的中间数组.
| 归档时间: |
|
| 查看次数: |
5334 次 |
| 最近记录: |