值?分钟 != 无 ? 值!分钟 : 无 不强制解包写入 可选(一些数字)

  • 本文关键字:分钟 数字 可选 包写入 ios swift
  • 更新时间 :
  • 英文 :

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"。但是在我的代码中,如果它包含数字,它将打印可选(一些数字(。

value?.min != nil ? value!.min : nil

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

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

你想要的是字符串"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)")

所以如果我不理解这个问题。你可以做:

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

右?

最新更新