2016-03-03 44 views
1

我有一個結構的JSON:如何從一個JSON數值讀取一個字符串,並將其添加到我的標籤,迅速(使用alamofire)

{"numberOfPeople":120} 

我想建立在快速的一個標籤,包含以下字符串:

We had seen there more than <<numberOfPeople fetched from json>> adults 

這是我到目前爲止做:

@IBOutlet weak var numberOfHelpersLabel: UILabel! 
var text = "We had seen there more than " 
var text2 = " adults" 


Alamofire.request(.GET, "https://webservice.com/getnumber") 
    .responseJSON { response in 

     switch response.result { 
     case .Success: 
      if let value = response.result.value { 
       let json = JSON(value) 
       let numberOfPeople = json["numberOfPeople"].description 
       self.numberOfHelpersLabel.text = self.text+numberOfPeople + self.text2 

      } 
     case .Failure(let error): 
      print("SWITCH ERROR") 
      print(error) 
     } 

    } 

,但它不工作,錯誤說:

enter image description here

你能幫助我嗎?

回答

1

你想要做的就是所謂的字符串插值。在字符串內部,您可以在轉義括號\()中放置表達式。就像這樣:

self.numberOfHelpersLabel.text = "We had seen there more than \(numberOfPeople) adults" 

(。第一個錯誤看起來奇怪,我看到在該行沒有可選的鏈接,我建議你清理和重建)

1

當值的JSON對象是可選項您需要拆開它們(因此推薦使用String?的錯誤)。

其他錯誤是因爲JSON訪問屬性,numberOfPeople可能是什麼,編譯器不知道如何在連接字符串在一起,所以你需要添加一個暗示,這將是一個字符串。

這兩個問題放在一起可以做一些方法......一個簡單的例子:

if let value = response.result.value { 
    let json = JSON(value) 

    if json["numberOfPeople"] != nil { 
     let numberOfPeople = json["numberOfPeople"] as? String 

     // your original string concatenation would then work 
     //self.numberOfHelpersLabel.text = self.text + numberOfPeople + self.text2 

     // or a bit cleaner using interpolation: 
     self.numberOfHelpersLabel.text = "We had seen there more than \(numberOfPeople) adults" 
    }  
} else { 
    self.numberOfHelpersLabel.text = "Wow no idea how many people!" 
} 
相關問題