仅当一个表达式中的可选项不是 nil 时才调用函数?

Posted

技术标签:

【中文标题】仅当一个表达式中的可选项不是 nil 时才调用函数?【英文标题】:Only calling a function when an optional is not nil in one expression? 【发布时间】:2015-10-17 23:42:59 【问题描述】:

我知道可以这样做:

let intValue: Int? = rawValue == nil ? Int(rawValue) : nil

甚至像这样:

var intValue: Int?

if let unwrappedRawValue = rawValue 
    intValue = Int(unwrappedRawValue)

但是我正在寻找是否有办法在一个表达式中执行此操作,如下所示:

let intValue: Int? = Int(rawValue) // Where Int() is called only if rawValue is not nil

【问题讨论】:

如果 intValue 不为 nil,您希望将 rawValue 分配给原始值吗? 如果您确定它不是 nil 而是您的两种方式都可以完成工作,您可以显式打开它。请问你到底想做什么?或者这是一个笼统的问题? 这是一个笼统的问题,我只是想知道是否有更“快速”的方法。 最快捷且大多数开发人员倾向于使用的方式是您编写的第二种方式。带有 if let 语句的那个​​ 【参考方案1】:

与Getting the count of an optional array as a string, or nil 类似,您可以使用map() Optional的方法:

/// If `self == nil`, returns `nil`.  Otherwise, returns `f(self!)`.
@warn_unused_result
@rethrows public func map<U>(@noescape f: (Wrapped) throws -> U) rethrows -> U?

例子:

func foo(rawValue : UInt32?) -> Int? 
    return rawValue.map  Int($0) 


foo(nil) // nil
foo(123) // 123

【讨论】:

【参考方案2】:

所以为了回答你的问题,在这里你可以有一些可选的情况如下: 你的第一个:

let intValue: Int? = rawValue == nil ? Int(rawValue) : nil

你的第二个:

var intValue: Int?

if let unwrappedRawValue = rawValue 
    intValue = Int(unwrappedRawValue)

第三种情况:

var intValue : Int?
if intValue !=nil

//do something

第四种情况,如果你确定值不为零

var intValue : Int?
intValue!

如果它的值为 nil,最后一种情况会使您的应用程序崩溃,因此您将来可能会将其用于调试目的。我建议您查看苹果手册中的可选绑定和可选链接的链接

optional Chaining

full apple guide for swift

在回答您的评论部分问题时,大多数开发人员倾向于使用这种方法:

var intValue: Int?

if let unwrappedRawValue = rawValue 
    intValue = Int(unwrappedRawValue)

因为它似乎是最安全的类型。您的来电。

【讨论】:

以上是关于仅当一个表达式中的可选项不是 nil 时才调用函数?的主要内容,如果未能解决你的问题,请参考以下文章

仅当条件为 True 时才在 python 中使用 Eel 调用 JavaScript 函数

仅当参数从上次调用更改时才执行函数体的函数/宏

仅当烧瓶中的变量发生变化时才更新网站

可选链接

关于swift中的可选类型

仅当使用 parsleyjs 选择选项 radio 时才需要验证表单