variables - 如何在 Swift 2 中保护现有变量赋值而不使用 let/var

标签 variables swift2

guard 关键字非常棒,自从 Swift 2 推出以来我就一直在使用它。我能够在许多场景中成功使用它,包括这个:

for viewController in self.navigationController!.viewControllers {
    guard let myCustomVC = viewController as? MyCustomViewController else {continue}

    myCustomVC.doWhatItHasToDo()
    break
}

就像魅力一样。迭代当前 navigationController 中的所有 viewController,直到找到我想要的。

问题是:现在我需要更新上面的代码以在 for..in 范围之外重用 myCustomVC 变量。它应该像在作用域之前声明变量一样简单,但是我找不到一种方法来在没有 letvar 的情况下 guard 变量赋值关键字。

以下假设代码演示了我想要实现的目标,但 Swift 不允许我这样做:

var myCustomVC: MyCustomViewController
for viewController in self.navigationController!.viewControllers {
    guard myCustomVC = viewController as? MyCustomViewController else {continue}

    myCustomVC.doWhatItHasToDo()
    break
}

// Now myCustomVC is available outside the for...in scope
myCustomVC.doWhatever()

Xcode 建议使用 == 而不是 =,因为它期望 guard 语句是 bool 上下文而不是变量赋值。

Xcode error

关于如何解决此问题有什么想法吗?

最佳答案

请原谅我没有回答你的问题。我认为你所要求的不可能。但我有一个替代方案。

看起来您正在一遍又一遍地手动编写 filter 方法。我建议只使用 filter 来查找您想要的元素。如果多个匹配,则使用 first 获取第一个。例如,下面我从列表中选择第一个偶数:

let myArray = [0,1,3,5,7,4,6,10,11]
let myNum = myArray.filter { $0 % 2 == 0 }.first

我不知道谓词使用的确切语法,但类似于以下内容

let myCustomVC = self.navigationController!.viewControllers.filter {
    $0 is MyCustomViewController }.first

// myCustomVC will be an optional because first returns an optional
if let myCustomVC = myCustomVC {
    myCustomVC.doWhatItHasToDo()
    myCustomVC.doWhatever()
}

或者,如果您要对与谓词匹配的每个元素执行操作,则使用 foreach

    let myCustomVC = self.navigationController!.viewControllers.filter {
    $0 is MyCustomViewController }.foreach { // action // }

关于variables - 如何在 Swift 2 中保护现有变量赋值而不使用 let/var,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34364254/

相关文章:

javascript - NodeJS : how to create a flag

mysql - bash 从命令行使用 mysql 中的变量

python - Python 中的 "Variable Definition"与 "Variable Assignment"

带观察者的 Swift 自定义导航栏项目

xcode - - 创建自定义转场时不显示执行

php - 使用 PHP PDO 查询中传递的变量

php - 在检查变量时分配变量

ios - 如何解决 'Object has been deleted or invalidated.' Realm 异常

ios - 如何在 iOS 中获取 iPod 库中歌曲的文件位置

Storyboard的 Swift 2 API 可用性检查