2017-09-13 45 views
0

如何防止我的文本在Swift插值中顯示Optional()?如何防止我的文本在Swift插值中顯示Optional()?

我的文字顯示爲:

---你只能切換特性,一旦從可選( 「PPP」)的所有圖片都上傳完畢.---

這裏是我的代碼

let imagesLeftToUpload = syncer!.imagesToUpload?.count 
     if(imagesLeftToUpload != nil && imagesLeftToUpload! > 0) { 
      let propertyConfig = syncer!.getPropertyConfig() 
      var propertyNameStr: String = "" 
      if(propertyConfig != nil && propertyConfig!.propertyName != nil) { 
       propertyNameStr = "from \(propertyConfig!.propertyName)" 
      } 
      messageText.text = "You can only switch properties once all images\(String(describing: propertyNameStr)) have finished uploading." 
     } 

回答

0

我結束了以下,因爲我不想用後衛去,但我想總是顯示消息:

  var propertyNameStr = "" 
      if let propertyName = syncer!.getPropertyConfig()?.propertyName { 
       propertyNameStr = "from \(propertyName) " 
      } 
      messageText.text = "You can only switch properties once all images \(propertyNameStr)have finished uploading." 
4

使用可選綁定安全打開可選項,然後對非可選值使用字符串插值。

guard let imagesLeftToUpload = syncer?.imagesToUpload?.count, imagesLeftToUpload > 0 else {return} 
guard let propertyConfig = syncer?.getPropertyConfig(), let propertyName = propertyConfig.propertyName else {return} 
messageText.text = "You can only switch properties once all images\(propertyName) have finished uploading." 
+0

是否有防護裝置之間和if語句有區別嗎? – Siyavash

+1

是的,guard語句允許您在同一範圍內使用安全展開的值,而不僅僅是在語句內部,它還使您能夠在條件失敗的情況下儘早退出當前範圍。 –

+2

是的:https://stackoverflow.com/questions/32256834/swift-guard-vs-if-if-let – BJHStudios

1

Swift是這樣做的,因爲您提供了一個可選的字符串,而不是一個字符串。 要解決它,你需要打開可選。

您可以使用!打開一個可選字符串,例如:

messageText.text = "You can only switch properties once all images\(propertyNameStr!) have finished uploading." 

或者您可以使用if語句來打開可選的。

if let nameString = propertyNameStr { 
    messageText.text = "You can only switch properties once all images\(nameString) have finished uploading." 
} 
+0

使用!操作員不是100%保存。當propertyNameStr在解包時爲零時,它會崩潰你的程序。 –

+1

「你提供了一個可選的,而不是一個字符串」這不完全正確。 'propertyNameStr'的類型是'String?',它是一個可選的String。沒有任何東西只是一個'Optional',因爲'Optional'實際上是一個泛型枚舉,其值可以是'nil'或泛型類型的非零值。 –

+0

謝謝,我編輯了我的帖子 –