2016-06-05 2 views
-1

В AppleScript. Предположим, у меня есть запись с названием Title.Applescript Получить значение свойства по строке имя свойства

Предположим, я установил переменную в текст «Заголовок»; могу ли я использовать эту переменную, чтобы получить значение свойства Title? В принципе, есть ли способ сделать что-то вроде этого:

set result to property named "Title" of myRecord 

Вместо:

set result to Title of myRecord 
+0

Вы пробовали это? –

+0

Почему вы хотите это сделать? В чем заключается задача, над которой вы работаете? Запись - это набор свойств (aka 'struct'), а не произвольная коллекция значений ключа (aka dictionary/hash/map). Есть способы гадости с внутренними буквами, но все они злые хаки со всякими неприятными пропахами. Гораздо лучше использовать правильную структуру данных для работы. – foo

+0

@CraigSmith - Да, конечно, я попробовал. –

ответ

0

вы можете попробовать попробовать ... на подходе ошибки:

set aRecord to {title:"hello world", author:"who's who"} 

try 
    aRecord as Unicode text 
on error error_message 
    set err to error_message 
end try 
err 

-- "Can’t make {title:\"hello world\", author:\"who's who\"} into type Unicode text." 

затем синтаксический анализ err (теперь это текст). это зависит от сложности aRecord, если это запись вложенных списков или записей; разбор будет очень сложным. получайте удовольствие :)

0

Я нашел ответ. Я также понимаю, что не задал правильный вопрос. Значение, которое я пытаюсь получить, относится к элементу списка свойств.

Вот что я узнал, и как это сделать:

use framework "Foundation" 

set _plist to ... 

set _objcPlist to GetAppleScriptObjectAsObjcObject(_plist) 

set _value to GetObjcPropertyValueByName("MyProperty", item 1 of _objcPlist) 

on GetAppleScriptObjectAsObjcObject(asObject) 
    set a to current application 
    set cClass to class of asObject 

    if (cClass is record) then 
     return a's NSDictionary's dictionaryWithDictionary:asObject 
    else if (cClass is list) then 
     return a's NSArray's arrayWithArray:asObject 
    else 
     error "Unexpected Class Type" 
    end if 
end GetAppleScriptObjectAsObjcObject 

on GetObjcPropertyValueByName(propertyName, objcItem) 
    return (objcItem's valueForKey:propertyName) as text 
end GetObjcPropertyValueByName 
Смежные вопросы