簡體   English   中英

無法在 swift 中檢查具有“null”值的 Switch 案例

[英]Unable to check Switch cases with "null" value in swift

要檢查多個條件,我正在使用switch statements

代碼:這里所有情況都很好,但是。 如果user_details?.rating = "" case _ where user_details?.rating ?? "" <= "1.9" case _ where user_details?.rating ?? "" <= "1.9"為什么?

如果我強制打開case _ where (user_details?.rating)! <= "1.9": case _ where (user_details?.rating)! <= "1.9":然后應用程序在達到這個值時崩潰

user_details?.rating = "" 那么如何將所有星星顯示為空

請指導我

switch user_details?.rating{

case "1.0":

    star1.image = UIImage(named: "star")

    star2.image = UIImage(named: "staremp")
    star3.image = UIImage(named: "staremp")
    star4.image = UIImage(named: "staremp")
    star5.image = UIImage(named: "staremp")
break
case _ where user_details?.rating ?? "" <= "1.9":

    star1.image = UIImage(named: "star")
    star2.image = UIImage(named: "star-half")

    star3.image = UIImage(named: "staremp")
    star4.image = UIImage(named: "staremp")
    star5.image = UIImage(named: "staremp")
break

case "2.0":

    star1.image = UIImage(named: "star")
    star2.image = UIImage(named: "star")

    star3.image = UIImage(named: "staremp")
    star4.image = UIImage(named: "staremp")
    star5.image = UIImage(named: "staremp")

 break

case _ where user_details?.rating ?? "" <= "2.9":

    star1.image = UIImage(named: "star")
    star2.image = UIImage(named: "star")
    star3.image = UIImage(named: "star-half")

    star4.image = UIImage(named: "staremp")
    star5.image = UIImage(named: "staremp")
 break


default:
    star1.image = UIImage(named: "staremp")
    star2.image = UIImage(named: "staremp")
    star3.image = UIImage(named: "staremp")
    star4.image = UIImage(named: "staremp")
    star5.image = UIImage(named: "staremp")

break

}

該應用程序正在崩潰,因為您force unwrapping user_details?.rating基本上說:此屬性包含的值不是nil ,如果我錯了,則使應用程序崩潰

嘗試在 switch 語句之前安全地打開user_details?.rating

  1. 使用if let

     if let rating = user_details?.rating { }else { }
  2. 使用guard let

     guard let rating = user_details?.rating else { return }
  3. 提供默認值:

     let rating = user_details?.rating ?? ""

然后您的代碼將如下所示:

guard let rating = user_details?.rating else {
    //do something if it is nil
    return
}

switch rating {
case "1.0":
    star1.image = UIImage(named: "star")
    star2.image = UIImage(named: "staremp")
    star3.image = UIImage(named: "staremp")
    star4.image = UIImage(named: "staremp")
    star5.image = UIImage(named: "staremp")
    break
case _ where user_details?.rating ?? "" <= "1.9":
    star1.image = UIImage(named: "star")
    star2.image = UIImage(named: "star-half")
    star3.image = UIImage(named: "staremp")
    star4.image = UIImage(named: "staremp")
    star5.image = UIImage(named: "staremp")
    break
case "2.0":
    star1.image = UIImage(named: "star")
    star2.image = UIImage(named: "star")
    star3.image = UIImage(named: "staremp")
    star4.image = UIImage(named: "staremp")
    star5.image = UIImage(named: "staremp")
    break
case _ where user_details?.rating ?? "" <= "2.9":
    star1.image = UIImage(named: "star")
    star2.image = UIImage(named: "star")
    star3.image = UIImage(named: "star-half")
    star4.image = UIImage(named: "staremp")
    star5.image = UIImage(named: "staremp")
    break
default:
    star1.image = UIImage(named: "staremp")
    star2.image = UIImage(named: "staremp")
    star3.image = UIImage(named: "staremp")
    star4.image = UIImage(named: "staremp")
    star5.image = UIImage(named: "staremp")
    break
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM