为什么非可选值打印为可选值?

时间:2017-07-11 01:58:23

标签: swift printing optional

我已阅读Non-optional shown as optional on print,但这对我的问题没有帮助。

我正在返回一个整数,但是一旦它打印出来,它就会被打印为可选的。为什么呢?

我试图解决代码挑战。目标是:

  

为返回数字的整数集合编写扩展名   特定数字出现在其任何数字中的时间。

这是我的实施:

extension Collection where Iterator.Element == Int {
    func challenge37(count character : Character) -> Int?{

        guard nil != Int(String(character)) else{
            print("character wasn't an integer")
            return nil
        }

        var counts : [Int] = []
        for item in self{
            var counter = 0
            let stringInt = String(describing: item)

            for currentCharacter in stringInt.characters{
                if character == currentCharacter{
                    counter += 1
                }
            }
            counts.append(counter)
        }
        guard let min = counts.min() else{
            print("no min")
            return nil
        }

        return min
    }
}

正如您在此处所见,我打印它:

print([5,15,512,522].challenge37(count: "5")) // Optional(1)

1 个答案:

答案 0 :(得分:1)

在函数内部返回Int。但是你的方法的实际签名是Int?,这意味着它实际上是一个可选的,你错了!

基本上你的方法签名是正确的。但是当你调用该函数时,你会得到一个可选的响应,并且必须打开它。

print([5,15,512,522].challenge37(count: "5")!) // 1

此外,如果您密切关注,您会注意到Xcode必须给您一个警告(以及解决方案)

  

表达式隐式强制从Int?强制转换为任何

enter image description here

Xcode向您发出警告,因为它发现您正在尝试打印可选项,并且知道这些通常是不受欢迎的。显然,它的解决方案是通过强制解包默认来展开它。