gpt4 book ai didi

swift - 如何转换 [String : Any] to [NSAttributedStringKey : Any]

转载 作者:可可西里 更新时间:2023-10-31 23:55:15 26 4
gpt4 key购买 nike

处理一些 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] ?

最佳答案

NSAttributedStringKeyan 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com