AppleScript似乎知道特殊值 null 。
如何从基于Cocoa Scripting的应用程序返回这样的值以获取可编写脚本的属性?
如果我从基于Cocoa脚本的应用程序返回nil
(NULL
)或NSNull
脚本属性getter,脚本编辑器将其解释为 缺失值
如果我返回[NSAppleEventDescriptor nullDescriptor]
,AppleScript甚至会显示错误。
答案 0 :(得分:1)
AppleScript使用typeNull
描述符指示未分配/无值,而missing value
由typeType
描述符cMissingValue
表示。 (它类似于JavaScript中的undefined
vs null
混乱,以及类似的PITA。)
答案 1 :(得分:1)
根据下面的测试,我正在使用cMissingValue
版的“空”。
NSAppleEventDescriptor(typeCode: UInt32(cMissingValue))
我正在使用Swift运行并通过以下代码将参数传递给AppleScript子例程:
Passing variables to an 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()
not 没打过这张支票。输入cMissingValue
即可。
我已将其添加为Swift扩展:NSAppleEventDescriptor.missingValue()
extension NSAppleEventDescriptor {
static func missingValue() -> NSAppleEventDescriptor {
return NSAppleEventDescriptor(typeCode: UInt32(cMissingValue))
}
}