相关疑难解决方法(0)

斯威夫特:守卫vs如果让

我一直在阅读关于Swift中的Optionals,我已经看过if let用于检查Optional是否包含值的示例,以及它是否存在 - 使用unwrapped值执行某些操作.

但是,我已经看到在Swift 2.0中,关键字guard主要用于.我想知道是否if let已从Swift 2.0中删除或是否仍然可以使用它.

我应该改变我的计划包含if letguard

conventions optional control-flow swift swift2

105
推荐指数
8
解决办法
4万
查看次数

如何避免强行展开变量?

我该如何避免使用!使用此功能解压缩操作通常是一个不好的选择.

使用它的代码有什么更好的选择,使用它使代码看起来更简单,因为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)

swift

27
推荐指数
3
解决办法
5504
查看次数

检查字符串是否包含 Swift 中的可选字符串,但前提是它不是 nil

我想向处理字符串列表的函数添加一个可选的“过滤器”参数。如果过滤器是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 中表达它的惯用方式是什么?

谢谢!

swift

1
推荐指数
1
解决办法
142
查看次数

标签 统计

swift ×3

control-flow ×1

conventions ×1

optional ×1

swift2 ×1