value?.min!= nil?值!.min:nil不强制展开写操作可选(一些数字)

问题描述 投票:0回答:1
func myFunc(array:[Int]) -> (min: Int, max: Int)?
{
    if array.isEmpty {return nil}
        var minNumber = array[0]
        var maxNumber = array[0]
        for number in array {
        if number < minNumber {
            minNumber = number
        }
        else if number > maxNumber{
            maxNumber = number
        }
    }
    return (minNumber, maxNumber)
}

let tempArray:[Int] = [1,2,3,4,5,6,7]
let value = myFunc(array: tempArray)

print("The minima is: \(value?.min != nil ? value!.min : nil) the maxima is \(value?.max != nil ? value!.max : nil)")

例如,在给定的代码中,我只是想让代码包含某个值,它将强制展开,但是如果不包含该值,则将仅显示“ nil”。但是在我的代码中,如果包含数字,它将打印Optional(一些数字)。

ios swift
1个回答
1
投票
value?.min != nil ? value!.min : nil

是(有条件的)expression,并求值为具有type。

的某个值

第一个表达式value!.min具有类型Int,但是第二个表达式nil是可选的并且具有类型Int?。因此,条件表达式的类型变为Int?,并打印为“ Optional(1)”。

您想要的是string“ nil”,或非nil值作为字符串:

print("The minimum is: \(value?.min != nil ? "\(value!.min)" : "nil")")

(以及类似的最大值)。现在两个表达式都在条件表达式中

value?.min != nil ? "\(value!.min)" : "nil")

strings,,结果也是一个字符串。可以缩写为

print("The minimum is: \(value.map {"\($0.min)"} ?? "nil")")

如果经常需要,则可以在可选类型上定义扩展方法

extension Optional {
    var descriptionOrNil: String {
        switch self {
        case .some(let wrapped): return "\(wrapped)"
        case .none: return "nil"
    }
    }
}

并用作

print("The minimum is: \((value?.min).descriptionOrNil)")

0
投票

所以,如果我不明白这个问题是错的。您可以这样做:

extension Optional where Wrapped == Int {
    var valueOrEmpty: String {
        guard let unwrapped = self else {
            return "nil"
        }
        return "\(unwrapped)"
    }
}

print("The minima is: \(value?.min.valueOrEmpty) the maxima is \(value?.max.valueOrEmpty)")

对吗?

© www.soinside.com 2019 - 2024. All rights reserved.