3

AppleScript 似乎知道特殊值null

如何从基于 Cocoa Scripting 的应用程序中为可编写脚本的属性返回这样的值?

如果我从基于 Cocoa Scripting 的应用程序返回nil( NULL) 或NSNull可编写脚本的属性获取器,脚本编辑器会将其解释为缺失值

如果我返回[NSAppleEventDescriptor nullDescriptor],AppleScript 甚至会显示错误。

4

2 回答 2

1

我正在使用cMissingValue“null”的版本,如下所示:

NSAppleEventDescriptor(typeCode: UInt32(cMissingValue))

我决定根据下面的测试使用它。

我正在使用 Swift 运行并将参数传递给 AppleScript 子例程,使用以下代码:

将变量传递给 AppleScript

let parameters = NSAppleEventDescriptor.list()

let null         = NSAppleEventDescriptor.null()
let missingValue = NSAppleEventDescriptor(typeCode: UInt32(cMissingValue))

parameters.insert(null, at: 0)
parameters.insert(missingValue, at: 0)
return parameters

这些参数被传递给 AppleScript 子例程,我对每个结果进行了注释:

on nilTest(paramNull, paramMissingValue)
    display dialog paramNull buttons {"OK"} # execution error: Can’t make current application into type string. (-1700)
    display dialog paramMissingValue buttons {"OK"} #"msng"

    display dialog "" & paramNull buttons {"OK"} #"current application"
    display dialog "" & paramMissingValue buttons {"OK"} #"missing value"
end nilTest

NSAppleEventDescriptor.null()版本似乎出于某种原因正在获取“当前应用程序”值。

似乎我可能想使用cMissingValue其他答案中所示的。

可以在 AppleScript 中对变量进行零检查,如下所示:

if yourVar is missing value then
    display dialog "is missing value" buttons {"OK"}
end if

NSAppleEventDescriptor.null()这个检查。类型cMissingValue可以。

我已将其添加为 Swift 扩展:NSAppleEventDescriptor.missingValue()

extension NSAppleEventDescriptor {

    static func missingValue() -> NSAppleEventDescriptor {
        return NSAppleEventDescriptor(typeCode: UInt32(cMissingValue))
    }

}
于 2018-09-27T23:40:29.197 回答
1

AppleScript 使用描述typeNull符来指示未分配/无值,而missing value由. (它类似于 JavaScript 中的vs mess,以及类似的 PITA。)typeTypecMissingValueundefinednull

于 2016-04-29T10:55:58.587 回答