AppleScript 似乎知道特殊值null。
如何从基于 Cocoa Scripting 的应用程序中为可编写脚本的属性返回这样的值?
如果我从基于 Cocoa Scripting 的应用程序返回nil
( NULL
) 或NSNull
可编写脚本的属性获取器,脚本编辑器会将其解释为缺失值。
如果我返回[NSAppleEventDescriptor nullDescriptor]
,AppleScript 甚至会显示错误。
AppleScript 似乎知道特殊值null。
如何从基于 Cocoa Scripting 的应用程序中为可编写脚本的属性返回这样的值?
如果我从基于 Cocoa Scripting 的应用程序返回nil
( NULL
) 或NSNull
可编写脚本的属性获取器,脚本编辑器会将其解释为缺失值。
如果我返回[NSAppleEventDescriptor nullDescriptor]
,AppleScript 甚至会显示错误。
我正在使用cMissingValue
“null”的版本,如下所示:
NSAppleEventDescriptor(typeCode: UInt32(cMissingValue))
我决定根据下面的测试使用它。
我正在使用 Swift 运行并将参数传递给 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))
}
}
AppleScript 使用描述typeNull
符来指示未分配/无值,而missing value
由. (它类似于 JavaScript 中的vs mess,以及类似的 PITA。)typeType
cMissingValue
undefined
null