仅当一个表达式中的可选项不是 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 时才调用函数?的主要内容,如果未能解决你的问题,请参考以下文章