展开“字符串?”快速变数?

时间:2018-09-01 11:25:51

标签: swift

我收到一条错误消息:

操场执行失败:

  

错误:myfirstplayground.playground:21:19:错误:可选类型'String?'的值不展开你是说用'!'要么 '?'?   var dateNum = Int(dates)

这是我的代码:

//: Playground - noun: a place where people can play

import Cocoa
import Foundation


class FartsPerDate {

    var dates: Int = 0
    farts: Int = 0

    init( dateNum: Int ) {

        self.dates = dateNum
        self.fpd()
    }

    func fpd() -> Int {

        farts = Int( (dates - 1)/2 )
        return farts
    }
}

print("Which date is it? (Enter an integer): >")
var dates = readLine()
var dateNum = Int(dates)
var answer = FartsPerDate(dateNum: dateNum! )
print(answer)

1 个答案:

答案 0 :(得分:0)

采用字符串(init(_:radix:))的Int初始化程序为“ failable”。这意味着,如果将不能转换为Int的字符串传递给它,它将返回nil。

听起来String也是可选的,因此您需要解包字符串并解包生成的Int:

您应该查找“可选绑定”和警卫声明,这是处理可选选项的两种方式:

可选绑定

if let datesString = dates, 
     let var dateNum = Int(datesString) {
   var answer = FartsPerDate(dateNum: dateNum )
   print(answer)
} else {
  print("You did not enter a valid number")
}

或使用保护声明:

guard let datesString = dates, 
    let var dateNum = Int(dates) else {
  //Normally you'd use a return here but you are not inside a function so you have to
  //exit the entire playground
  fatalError("You did not enter a valid number")  
}
var answer = FartsPerDate(dateNum: dateNum )
print(answer)

每一个Swift程序员都必须处理可选参数。我建议您下载Apple iBook“ Swift编程语言”并阅读有关可选选项的部分,然后使用它们进行大量练习,直到您感到满意为止。