Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 为什么可选属性必须返回某些内容?_Swift - Fatal编程技术网

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
。所以在我的问题中,我只想在满足一个条件时返回一个值,否则我希望它被视为没有任何变化(因为它没有变化)。