【问题标题】:value?.min != nil ? value!.min : nil not force unwrapping writing Optional(some number)value?.min != nil ? value!.min : nil 不强制展开写作可选(一些数字)
【发布时间】:2020-02-02 15:23:08
【问题描述】:
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(some number)。

【问题讨论】:

  • value?.min != nil ? value!.min : nilvalue?.min 是一样的……那为什么呢?
  • 不是sn-p,是完整代码。

标签: ios swift


【解决方案1】:
value?.min != nil ? value!.min : nil

是一个(有条件的)表达式,计算结果为某个具有类型的值。

第一个表达式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")

字符串,,结果也是一个字符串。这可以简写为

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)")

【讨论】:

    【解决方案2】:

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

    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)")

    对吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-09
      • 1970-01-01
      • 1970-01-01
      • 2012-06-26
      • 2018-11-30
      • 1970-01-01
      • 2010-11-01
      • 1970-01-01
      相关资源
      最近更新 更多