return json 数据拆分成不同的值 Swift 4
return json data split up into different values Swift 4
目前我们有 json 个以这种格式返回的值
"CSS_RGB__c": "rgb(190,102,123)",
我正在尝试将这些值转换为单独的 r、g、b 值(例如 r = 190、g = 102、b = 123)
以前这行得通:
if let raw = dictionary["CSS_RGB__c"] as? NSString {
let filtered = raw.substring(from: 4).trimmingCharacters(in: CharacterSet(charactersIn: ")"))
var values = filtered.components(separatedBy: ",")
if values.count == 3 {
self["r"] = NSString(string: values[0]).floatValue as NSNumber?
self["g"] = NSString(string: values[1]).floatValue as NSNumber?
self["b"] = NSString(string: values[2]).floatValue as NSNumber?
}
}
但使用新方法 swift 4 次解析 json 我不太确定如何拆分这些值:
struct Family: Codable {
let cssRGBC: String
enum CodingKeys: String, CodingKey {
case cssRGBC = "CSS_RGB__c"
}
}
您可以使用正则表达式在两个字符串之间找到一个字符串,映射其范围以提取结果,使用 components(separatedBy: ",")
获取 rgb 组件并从字符串中初始化一个新整数,如果存在空格则修剪:
let raw = "rgb(190,102,123)"
let regexPattern = "(?<=rgb\()(.*)(?=\))"
if let rgb = raw.range(of: regexPattern, options: .regularExpression)
.map({String(raw[[=10=]])})?
.components(separatedBy: ",")
.flatMap({Int([=10=].trimmingCharacters(in: .whitespaces))}){
print(rgb) // "[190, 102, 123]\n"
}
目前我们有 json 个以这种格式返回的值
"CSS_RGB__c": "rgb(190,102,123)",
我正在尝试将这些值转换为单独的 r、g、b 值(例如 r = 190、g = 102、b = 123)
以前这行得通:
if let raw = dictionary["CSS_RGB__c"] as? NSString {
let filtered = raw.substring(from: 4).trimmingCharacters(in: CharacterSet(charactersIn: ")"))
var values = filtered.components(separatedBy: ",")
if values.count == 3 {
self["r"] = NSString(string: values[0]).floatValue as NSNumber?
self["g"] = NSString(string: values[1]).floatValue as NSNumber?
self["b"] = NSString(string: values[2]).floatValue as NSNumber?
}
}
但使用新方法 swift 4 次解析 json 我不太确定如何拆分这些值:
struct Family: Codable {
let cssRGBC: String
enum CodingKeys: String, CodingKey {
case cssRGBC = "CSS_RGB__c"
}
}
您可以使用正则表达式在两个字符串之间找到一个字符串,映射其范围以提取结果,使用 components(separatedBy: ",")
获取 rgb 组件并从字符串中初始化一个新整数,如果存在空格则修剪:
let raw = "rgb(190,102,123)"
let regexPattern = "(?<=rgb\()(.*)(?=\))"
if let rgb = raw.range(of: regexPattern, options: .regularExpression)
.map({String(raw[[=10=]])})?
.components(separatedBy: ",")
.flatMap({Int([=10=].trimmingCharacters(in: .whitespaces))}){
print(rgb) // "[190, 102, 123]\n"
}