在Swift 4中为inout参数解开可选值

时间:2018-10-19 13:24:33

标签: ios swift4

假设我有一个接受inout参数的函数:

func foo(param: inout Int?) {
   //I want to convert param to Int here without using return

}

我想在func中解包参数而不必返回它。我知道有很多方法可以解开可选的内容,但是我需要在一个函数内进行操作以重用它,而不必重写如下内容:

if let foo = someOptionalFoo {

}

在代码中多次。谢谢。

2 个答案:

答案 0 :(得分:0)

func foo(param: inout Int?) {
    //I want to convert param to Int here without using return

}

var bar: Int? = 5

foo(param: &bar)

print("\(bar)") //Optional(5)

您是否希望只打印5张,而无需选择?如果是这样,我认为这是不可能的。 bar被键入为可选。通常,应该没有办法从另一个范围更改该变量的类型。

可能的是,只需确保在foo上调用bar之后,定义foo,以确保bar调用后永远不会为零。就是这样:

func foo(param: inout Int?) {
    //Make sure that param can never be nil, but some default if it is nil
    param = param ?? 0
}

var bar: Int?

foo(param: &bar)

print("\(bar)") //Optional(0)

但是,每个人都会认为这是超级糟糕的做法,因此,如果不是绝对需要的话(我不认为这样做),您应该不要这样做。

答案 1 :(得分:0)

您可以使用Optional.map

let i: Int? = 3

_ = i.map { unwrapped in
    //use the unwrapped value
    print(unwrapped)
}

请记住,它返回一个值,因此返回_ =