[英]How do you convert optional text input to Int in Swift 2, Xcode 7 beta using if let - toInt does not work
我在將可選輸入String轉換為Int以便對其進行計算時遇到麻煩。
let odoField = UITextField() // allows entry of text to iOS field
odoField.text = "12500" // simulated input
let odoString = odoField.text
// now here is where I get trouble...
if let odoInt = odoString.toInt() {
distance = Double(odoInt)
}
顯然,toInt后綴不再是Swift的一部分。 我嘗試了以下方法:
if let odoInt = Int(odoString)() {
但隨后出現錯誤“可選類型的字符串?未解包”並提出了一個建議! 或?,如:
if let odoInt = Int(odoString!)() {
但是然后我仍然得到有關解包的歐元,建議我再添加一個!,然后在執行此操作時,我擺脫了括號的另一個錯誤,如下所示:
if let odoInt = Int(odoString!)! {
然后出現另一個錯誤,“用於條件綁定的初始化程序必須具有可選類型,而不是'Int'。”
我正在嘗試在此處創建條件展開。
救命!
首先要了解的是,UITextField.text返回一個可選字符串,因此在您的代碼中, odoString
是String?
類型的String?
。 另外,請記住, Int
構造函數采用String
而不是String?
所以你必須解開String?
才能使用它。 只是放一個!
如果odoString
為nil
則該變量(如Int(odoString!)
)之后將使您的應用程序崩潰。 更好的是這樣的:
if let s = odoString, odoInt = Int(s) {
// odoInt is of type Int. It is guaranteed to have a value in this block
}
我已經測試了Daniel T的答案,並且有效。
我有一種情況,我想將文本字段的結果作為可選的Int返回。 您可以使用以下代碼將其擴展為涵蓋您的情況:
let odoInt = odoField.text != nil ? Int(odoField.text!) : nil
if let odoInt = odoInt {
// Use unwrapped odoInt here
}
對於更緊湊的解決方案,另一種選擇是使用flatMap:
let number = odoString.flatMap { Double($0) } ?? 0.0
實際上,看來Swift 2(Xcode 7 beta 6)的答案比上面的答案要簡單。 當執行以下操作時,代碼不會阻塞odoString的nil值:
if let odoInt = Int(odoString!) {
distance = Double(odoInt)
}
因此,我推測,除非有更深的了解,否則編譯器確實將其視為“如果語句為True(右側有效),則定義並初始化變量,然后繼續執行”。 我歡迎進一步的反饋。 這確實不必要了上面建議的許多額外代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.