在预期返回'Double?'的函数中缺少返回值

Rhy*_*rds -1 swift

我正在研究Apple的App Development with Swift book,我在Optionals部分遇到了一些问题.

在访问另一个字典以返回满足条件的可选值后,我将无法访问字典.返回的错误是:

在预期返回'Double?'的函数中缺少返回值

var prices = ["Chips": 2.99, "Donuts": 1.89, "Juice": 3.99, "Apple": 0.50, "Banana": 0.25, "Broccoli": 0.99]
var stock = ["Chips": 4, "Donuts": 0, "Juice": 12, "Apple": 6, "Banana": 6, "Broccoli": 3]

func priceCheck(name: String) -> Double? {
    let pricefinder = name
    if let name = stock[name] {
        print(name)
        if name > 0 {
            if let pricefinder = prices[pricefinder] {
                print(pricefinder)
                return pricefinder
            } else {
                return nil
            }
        }
    } else {
        return nil
    }
}
Run Code Online (Sandbox Code Playgroud)

上面的代码我哪里错了?我需要检查产品是否有库存,然后在该条件评估为真时返回其价格.

还有更优雅的解决方案吗?

Fog*_*ter 5

通过利用Swift为您提供的一些工具,您的功能可以缩短很多.在这里,看看,这是一样的...

func priceCheck(name: String) -> Double? {
    guard let stockAmount = stock[name],
        stockAmount > 0,
        let price = prices[name] else {
        return nil
    }

    return price
}
Run Code Online (Sandbox Code Playgroud)

  • 在我的回答中提到作为替代方法:) (2认同)
  • 谢谢@Fogmeister这真的很棒.我刚刚检查了这本书,并且有一个关于使用后备保护的整个部分,帮助解开了这个概念. (2认同)