Swift:如何为参数创建一个nil的方法

时间:2016-01-07 02:38:30

标签: swift

如何创建一个调用最初设置为nil的参数的方法?我正在通过Swift Guided Tour。在尝试了有关类的部分中的代码后,我收到了错误。

据我了解错误,我的方法simpleDescription()正在尝试从numberOfSides获取值,但它是零,因此会导致错误。我尝试将var设为可选var numberOfSides: Int?,但这并不起作用。我还尝试了方法中的可选链接,

func simpleDescription() -> String {
        if let checkForNil = self.numberOfSides {
       return "a shape with \(numberOfSides) sides."}
        }

但这也不起作用。

这是错误

missing argument for parameter 'numberOfSides' in call super.init(name: name)

和代码......

   class NamedShape {
        var numberOfSides: Int
        var name: String

        init(name: String, numberOfSides: Int ) {
           self.name = name
           self.numberOfSides = numberOfSides
        }

        func simpleDescription() -> String {
           return "a shape with \(numberOfSides) sides."}

    }

    var namedShapeOne = NamedShape(name: "My Box", numberOfSides: 6)

    print("\(namedShapeOne.name) is \(namedShapeOne.simpleDescription())")

1 个答案:

答案 0 :(得分:1)

我将假设案例与上面评论的一样(您编写代码示例,但您的numberOfSides属性是可选的,已初始化为nil)。在这种情况下,您可以使用例如 nil coalescing operator

  

nil合并算子(a ?? b)打开一个可选的a if   包含一个值,如果a为nil,则返回默认值b。该   表达式a始终是可选类型。表达式b必须   匹配存储在。

中的类型

关于代码修改示例的示例,使用??运算符:

class NamedShape {
    var numberOfSides: Int? = nil
    var name: String

    init(name: String) {
        self.name = name
    }

    func simpleDescription() -> String {
        return "a shape with \(numberOfSides ?? 0) sides."}
}

var namedShapeOne = NamedShape(name: "My Box")

print("\(namedShapeOne.name) is \(namedShapeOne.simpleDescription())")

另一个选项是使用if-let子句:打开可选numberOfSides并输入if子句(如果它不是nil;否则转到else子句

class NamedShape {
    var numberOfSides: Int? = nil
    var name: String

    init(name: String) {
        self.name = name
    }

    func simpleDescription() -> String {
        if let a = numberOfSides {
            return "a shape with \(a) sides."}
        else {
            return "a shape with undefined number of sides."
        }
    }
}

var namedShapeOne = NamedShape(name: "My Box")

print("\(namedShapeOne.name) is \(namedShapeOne.simpleDescription())")