Swift 为什么可选属性必须返回某些内容?
我有一个只读属性:Swift 为什么可选属性必须返回某些内容?,swift,Swift,我有一个只读属性: private var allProducts: [String]? { if let selectedProductSeries = selectedProductSeries { return ["someProduct"] } else { return nil } } 很好,这正是我想要的,但我的问题是为什么我必须在我的if/else中详尽无遗。我将它标记为可
private var allProducts: [String]? {
if let selectedProductSeries = selectedProductSeries {
return ["someProduct"]
} else {
return nil
}
}
很好,这正是我想要的,但我的问题是为什么我必须在我的if/else
中详尽无遗。我将它标记为可选的,因此我希望发生的是,如果我不返回任何内容,它将为零。但是当然,如果我去掉else
它会抱怨说:在预期返回的函数中缺少返回:[String]?
,这很有趣,因为消息说它期望我返回一些东西,尽管它是可选的
这是为什么?我假设如果隐式添加了
返回nil
,错误可能会更频繁地发生。函数/方法中包含许多if
-或switch
-语句,您很容易忽略这些语句,可能会漏掉每一条语句。显式的返回nil
迫使您处理这种可能性。这种语言很年轻,将来可能会添加隐式返回。我个人不喜欢在Swift中使用它,因为Swift样式更注重明确性。只需返回一个条件展开,如果它失败,它将返回nil,而且看起来您仍然在使用Swift 1.x,否则它不会抱怨在这两种条件下都有返回。顺便说一句,return[“someProduct”]??@LeoDabus您能解释一下“条件展开…”吗?还有,[“someProduct”]
的缺点是什么?请注意,整个方法体可以重写为返回selectedProductSeries?[“someProduct”]
。斯威夫特的一般哲学是“隐式类型,显式控制流”,这种语言非常善于提供便利,使其发挥良好的效果。正是如此-而且,使返回nil
隐式将破坏整个选中选项的点,也就是说,强迫你在任何可能出现的情况下都考虑零的情况。如果他们开始做这样的事情,他们还不如放弃作为静态类型系统一部分的optionals的整个业务,回到Objective-C的哲学“使noop成为nil的隐式默认值”@PaulCantrell如果某个东西返回一个可选值,那么它的隐式返回值是nil
,然后再执行任何操作。我不知道你的观点是什么。@PeterFoti你能举个例子吗?@PeterFoti不编译:func f()->Int?{}
也不编译:让g:()->Int?={}
你能解释一下“它的隐式返回值为零”是什么意思吗?这在其他语言(例如Ruby)中是正确的,但在Swift中没有类似的东西。@PaulCantrell如果我写var-someVar:String?
并且你在设置它之前得到someVar
的值,它将为零。因此,在我们做任何事情之前,它的隐式返回值是nil
。所以在我的问题中,我只想在满足一个条件时返回一个值,否则我希望它被视为没有任何变化(因为它没有变化)。