>

여기에 "{\"label\":\"57-175\",\"stock\":0}" 와 같은 문자열이 있습니다.  내가 57 를 얻을 필요가  그리고 175  정수로 배열 번호와 비교해야하지만 여기서 문자열에서 자른 후 정수 형식으로 얻을 수 없으며 정수를 가져 오려고 시도했습니다. 57) 또는 선택적 (175) 숫자와 언급 된 숫자는 아래 배열의 정수와 비교해야합니다. 내 시도한 코드는 누구나이 문제를 해결하는 방법을 도와 줄 수 있습니까?

for item in (self.detailModel?.extensionAttribute?.productStock)! {
    let start = item.index(item.startIndex, offsetBy: 10)
    print(start)
    let end         = item.index(item.endIndex, offsetBy: -12)
    let range       = start..<end
    let mySubstring = item[range]
    let myString    = String(mySubstring)
    print(myString)
    let stockStart     = item.index(item.startIndex, offsetBy: 18)
    let stockEnd       = item.index(item.endIndex, offsetBy: -1)
    let stockRange     = stockStart..<stockEnd
    let stockSubString = item[stockRange]
    let stockString    = String(stockSubString)
    print(stockString)
    if stockString ==  "\"stock\":0" {
        let startSize  = myString?.prefix(2)
        let sizeString = String(describing: startSize)
        print(sizeString)
        let color   = sizeString.replacingOccurrences(of: "\"", with: "")
        self.colorNumber = color
        let endSize = myString?.suffix(3)
        let string  = String(describing: endSize)
        print(string)
        let size = string.replacingOccurrences(of: "\"", with: "")
        self.sizeNumber = size
        print(self.sizeNumber)
        for item in self.configurableArray {
            for (key, array) in item {
                if (self.colorNumber?.contains("\(key)"))! {
                    print(Int(self.sizeNumber!))
                    let farray = array.filter {
                        $0 != Int(self.sizeNumber!) 
                    }
                }
                print(self.colorNumber!)
                print(key)
                print(self.configurableArray)
            }
        }
    }
}

  • 답변 # 1

    빠르고 더러운 방법 :

    let jsonData = jsonString.data(using: .utf8)!
    let jsonDictionary = try JSONSerialization.jsonObject(with: jsonData, options: []) as! [String: Any]
    let labelString = jsonDictionary["label"] as! String
    let labelNumberArray = labelString.components(separatedBy: "-").map({ Int($0) })
    let number1 = labelNumberArray[0]!
    let number2 = labelNumberArray[1]!
    
    

    위의 코드와 같은 모든 것을 강제로 풀기보다는 guard 또는 if 문을 사용하는 것이 좋습니다.

    guard let jsonData = jsonString.data(using: .utf8),
        let jsonDictionary = try JSONSerialization.jsonObject(with: jsonData, options: []) as? [String: Any],
        let stock = jsonDictionary["stock"] as? NSNumber,
        let labelString = jsonDictionary["label"] as? String else {
        //return or throw expection
    }
    let labelNumberArray = labelString.components(separatedBy: "-").flatMap({ Int($0) })
    guard labelNumberArray.count == 2 else {
        //return or throw expection
    }
    let labelNumber1 = labelNumberArray[0]
    let labelNumber2 = labelNumberArray[1]
    let stockNumber = stock.intValue
    
    

  • 이전 amazon web services - AWS의 eb deploy에서 cname을 지정하는 방법
  • 다음 시간 초과 예외가있는 Kafka 브로커 성능 문제