无法使用AutoreleasingUnsafePointer解包Optional.None

时间:2014-06-10 19:53:14

标签: swift

使用应该失败的Applescript命令运行NSAppleScript.executeAndReturnError并返回错误时,Can't unwrap Optional.None会出现errorDict错误。

var errorDict: NSDictionary? = nil
var scriptObject:NSAppleScript = NSAppleScript(source: command)
var execute:NSAppleEventDescriptor = scriptObject.executeAndReturnError(&errorDict)

我理解错误是由于展开nil可选变量,但executeAndReturnError必须采用可选变量。我怎么能解决这个问题?

1 个答案:

答案 0 :(得分:5)

尝试初始化NSAppleScript对象而不是NSDictionary?对象时,很可能会发生此错误。 NSAppleScript(source:)failable initializer,这意味着如果编译脚本时发生错误,它可能会返回nil。您的代码应如下所示:

if let scriptObject = NSAppleScript(source: command) {
    var errorDict: NSDictionary? = nil
    let execute = scriptObject.executeAndReturnError(&errorDict)
    if errorDict != nil {
        // script execution failed, handle error
    }
} else {
   // script failed to compile, handle error
}

Sulthan的回答很有道理,但是从Swift 1.2开始,executeAndReturnError(errorInfo:)不再返回Optional类型,即使它可以返回nil(请参阅此{ {3}})。处理执行失败的正确方法是检查errorInfo字典是否有错误。