可选字符串 - 视图控制器

问题描述:

我似乎无法摆脱下面的标签中的“可选”标签。我查看了不同的资源,但无法弄清楚要实施什么。你能告诉我我错在哪里吗?可选字符串 - 视图控制器

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 '。不是必须的,但会让你的生活更轻松。 –

解开做如下

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没有显示真正的代码。 –