我一直在阅读关于Swift中的Optionals,我已经看过if let用于检查Optional是否包含值的示例,以及它是否存在 - 使用unwrapped值执行某些操作.
但是,我已经看到在Swift 2.0中,关键字guard主要用于.我想知道是否if let已从Swift 2.0中删除或是否仍然可以使用它.
我应该改变我的计划包含if let到guard?
我该如何避免使用!使用此功能解压缩操作通常是一个不好的选择.
使用它的代码有什么更好的选择,使用它使代码看起来更简单,因为if检查变量!被召唤永远不会是零,所以不能崩溃.
我的导师向我们介绍了bang(!)操作员,然后告诉我们再也不要使用它了.告诉我们为什么当然,如果可选项为零,它将使我们的应用程序崩溃.
然而,我发现自己处于这样的情况下,爆炸操作员似乎是最简洁和安全的选择.
func fullName() -> String {
if middleName == nil {
return "\(firstName) \(lastName)"
}else{
return "\(firstName) \(middleName!) \(lastName)"
}
}
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法来做这样的事情?
此外,如果有人想知道,这是完整的课程.
class CPerson{
var firstName: String
var middleName: String?
var lastName: String
init(firstName: String, middleName: String?, lastName: String) {
self.firstName = firstName
self.middleName = middleName
self.lastName = lastName
}
convenience init(firstName: String, lastName: String) {
self.init(firstName: firstName, middleName: nil, lastName: lastName)
}
func fullName() -> String {
if middleName == nil {
return "\(firstName) \(lastName)" …Run Code Online (Sandbox Code Playgroud) 我想向处理字符串列表的函数添加一个可选的“过滤器”参数。如果过滤器是nil,我想处理所有字符串,否则我只想处理包含过滤器的字符串。大致:
func process(items: [String], filter: String?) {
for item in items {
if filter == nil || item.contains(filter) {
// Do something with item
}
}
}
Run Code Online (Sandbox Code Playgroud)
类型检查器抱怨将过滤器传入,contains因为它是可选的,但contains需要一个String. 我当然可以强制展开,但这看起来很丑陋。上面的代码会在 Kotlin 中编译,因为它会巧妙地抛弃可选的,但是在 Swift 中表达它的惯用方式是什么?
谢谢!