2017-10-07 91 views
-5

我似乎無法擺脫下面的標籤中的「可選」標籤。我查看了不同的資源,但無法弄清楚要實施什麼。你能告訴我我錯在哪裏嗎?可選字符串 - 視圖控制器

Cannot get rid of "Optional" label.

class RatingViewController: UIViewController { 



@IBOutlet weak var rateLabel: UILabel! 
@IBOutlet weak var rateView: EmojiRateView! 


var ServicePoint: String! 

var ref:DatabaseReference? 


let ratingTexts = [NSLocalizedString("Çok Kötü", value:"Very Bad", comment: ""), NSLocalizedString("Kötü", value:"Bad", comment:""), NSLocalizedString("Normal", value:"Normal", comment:""), NSLocalizedString("İyi", value:"Good", comment:""), NSLocalizedString("Çok iyi", value:"Very good", comment:""), NSLocalizedString("Mükemmel", value:"Perfect", comment:"")] 


var newRateSyting = String("%.2f, %@")! 



override func viewDidLoad() { 
    super.viewDidLoad() 


    rateView.rateValueChangeCallback = {(rateValue: Float!) -> Void in 

     self.rateLabel?.text = String(format: self.newRateSyting, rateValue, self.ratingTexts[Int(rateValue)]) 

} 

}

+1

在Apple的Swift書籍中查找「Optionals」,你會得到答案(還有更多)。 – dasdom

+0

設置「!」標記在值的末尾確保值不會是**零**其他方面您可以使用「??」未找到值「」 – iPatel

+0

並命名變量,在您的案例中'ServicePoint'以小寫字母開頭'servicePoint '。不是必須的,但會讓你的生活更輕鬆。 –

回答

0

解開做如下

let strRating = "\(self.newRateSyting!)\(rateValue!)\(self.ratingTexts[Int(rateValue)]!)" 
self.rateLabel?.text = strRating 

let value : String? = "4.7" 
let review : String? = "very good" 

let strRate = "\(value), \(review)" 

print("Before unwrap") 

print(strRate) 

print("\n After unwrap") 
let strRate2 = "\(value!), \(review!)" 
print(strRate2) 

輸出:

enter image description here

注:

如果你有陣列字典的,陣列陣列的,字典字典的,字典陣列,則你必須打開如下:

(arr[index]["key"])! , (arr[index][index])!, (arr["key"]["key"])!, (arr["key"][index])! 

無論多少數組或字典都很複雜,總是遵循上面的說法。

如果你還有疑問,那麼你可以問。

+0

'字符串(格式:,...)'不*返回一個可選項。 –

+0

@MartinR希望它現在好了。但是,無論何時我使用'String(format:,..)',xcode都會使用它來避免警告,並且它總是返回可選項。你能否向我解釋我錯在哪裏? –

+0

https://developer.apple.com/documentation/swift/string/1417691-init不會返回一個可選的,實際上我不能用所提供的代碼重現OP的問題。所以要麼我忽略了某些東西,要麼OP沒有顯示真正的代碼。 –