无法识别 Swift 中的词典扩展名
Dictionary extension in Swift is not recognized
我正在尝试使用以下代码扩展字典:
extension Dictionary where Key: ExpressibleByStringLiteral, Value: AnyObject {
var jsonString: String? {
if let dict = (self as AnyObject) as? Dictionary<String, AnyObject> {
do {
let data = try JSONSerialization.data(withJSONObject: dict, options: JSONSerialization.WritingOptions(rawValue: UInt.allZeros))
if let string = String(data: data, encoding: String.Encoding.utf8) {
return string
}
} catch {
print(error)
}
}
return nil
}
}
我写的是这样的:
let x: [String: String] = ["": ""]
x.jsonString
我收到这个错误:
Value of type '[String: String]' as no member 'jsonString'
我缺少什么吗?
因为 String
是一个值类型,寻找它是
public struct String {
和AnyObject
仅指class的任何实例,等同于Objective-C中的id
,所以x
的这个声明
[String: String]
不适合 [String: AnyObject]
因为 Any
指的是 class、struct 或枚举的任何实例,所以它非常适合
根本不需要约束字典值类型:
extension Dictionary where Key: ExpressibleByStringLiteral {
var jsonString: String? {
guard let data = try? JSONSerialization.data(withJSONObject: self)
else { return nil }
return String(data: data, encoding: .utf8)
}
}
我正在尝试使用以下代码扩展字典:
extension Dictionary where Key: ExpressibleByStringLiteral, Value: AnyObject {
var jsonString: String? {
if let dict = (self as AnyObject) as? Dictionary<String, AnyObject> {
do {
let data = try JSONSerialization.data(withJSONObject: dict, options: JSONSerialization.WritingOptions(rawValue: UInt.allZeros))
if let string = String(data: data, encoding: String.Encoding.utf8) {
return string
}
} catch {
print(error)
}
}
return nil
}
}
我写的是这样的:
let x: [String: String] = ["": ""]
x.jsonString
我收到这个错误:
Value of type '[String: String]' as no member 'jsonString'
我缺少什么吗?
因为 String
是一个值类型,寻找它是
public struct String {
和AnyObject
仅指class的任何实例,等同于Objective-C中的id
,所以x
[String: String]
不适合 [String: AnyObject]
因为 Any
指的是 class、struct 或枚举的任何实例,所以它非常适合
根本不需要约束字典值类型:
extension Dictionary where Key: ExpressibleByStringLiteral {
var jsonString: String? {
guard let data = try? JSONSerialization.data(withJSONObject: self)
else { return nil }
return String(data: data, encoding: .utf8)
}
}