如何创建一个调用最初设置为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())")
答案 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())")