簡體   English   中英

在Swift 2,Xcode 7 beta中,如何使用if let-toInt無法將可選文本輸入轉換為Int

[英]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返回一個可選字符串,因此在您的代碼中, odoStringString?類型的String? 另外,請記住, Int構造函數采用String而不是String? 所以你必須解開String? 才能使用它。 只是放一個! 如果odoStringnil則該變量(如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.

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