快速双重打开Optionals

use*_*492 9 xcode optional swift

我理解Swift中的可选项是什么,但我刚刚遇到了"Double Wrapped Optional",如果我不使用两个'!'Xcode则会出现编译错误

可选类型'String?'的值 没有打开; 你的意思是用'!' 要么 '?'?

我有以下代码,其中app是类型NSRunningApplication.

let name: String = app.localizedName!
Run Code Online (Sandbox Code Playgroud)

我为什么要用两个!?不足以打开变量因为它是类型var localizedName: String?.

上下文: Xcode要我使用let name: String = app.localizedName!!,否则它会给出上面的编译错误.该app变量被定义为如下:

var apps = NSWorkspace().runningApplications.filter{$0.activationPolicy == NSApplicationActivationPolicy.Regular}
for app in apps{
    //code posted above
    …
}
Run Code Online (Sandbox Code Playgroud)

所以我知道这app不是一个可选的,并且总是有一个值,也不是一个可选的应用程序.

PS有没有办法在使用快速枚举时定义类型?喜欢for Foo(app) in apps哪里apps = [AnyObject].

Mar*_*n R 4

问题是NSWorkspace().runningApplications返回的数组AnyObject必须转换为以下数组 NSRunningApplication

let apps = NSWorkspace().runningApplications as! [NSRunningApplication]
let filteredApps = apps.filter {
        $0.activationPolicy == NSApplicationActivationPolicy.Regular
}
for app in apps {
    let name: String = app.localizedName!
}
Run Code Online (Sandbox Code Playgroud)