Сценарии Какао: возвращение "ноль" против "пропущенного значения"
Похоже, что AppleScript знает специальное значение null.
Как я могу вернуть такое значение из моего приложения на основе сценариев Какао для свойства сценариев?
Если я вернусь nil
(NULL
) или же NSNull
для получателя свойств сценариев из моего приложения на основе сценариев Cocoa редактор сценариев интерпретирует это как отсутствующее значение.
И если я вернусь [NSAppleEventDescriptor nullDescriptor]
, AppleScript даже показывает ошибку.
2 ответа
AppleScript использует typeNull
дескриптор для указания неназначенного / без значения, тогда как missing value
представлен typeType
дескриптор cMissingValue
, (Это аналогично undefined
против null
беспорядок в JavaScript и аналогичный PITA.)
Я использую 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))
}
}