Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
返回分成不同值的json数据Swift 4_Json_Swift_Parsing_Swift4_Codable - Fatal编程技术网

返回分成不同值的json数据Swift 4

返回分成不同值的json数据Swift 4,json,swift,parsing,swift4,codable,Json,Swift,Parsing,Swift4,Codable,目前,我们有以这种格式返回的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(charact

目前,我们有以这种格式返回的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"
}
}

您可以使用正则表达式在两个字符串之间查找字符串,映射其范围以提取结果,使用componentsseparatedBy:,以获取rgb组件,并从字符串中初始化一个新的整数,如果存在,则修剪空白:

let raw = "rgb(190,102,123)"
let regexPattern = "(?<=rgb\\()(.*)(?=\\))"
if let rgb = raw.range(of: regexPattern, options: .regularExpression)
    .map({String(raw[$0])})?
    .components(separatedBy: ",")
    .flatMap({Int($0.trimmingCharacters(in: .whitespaces))}){
    print(rgb)  // "[190, 102, 123]\n"
}

这很好,如果我分别需要r,g,b的值,比如r=190,g=102,etcrgb[0],rgb[1],rgb[2]