Help us understand the problem. What is going on with this article?

AppleScriptのレコードをNSDictionaryに変換すると予約語の属性が消えてしまう

More than 3 years have passed since last update.
  • AppleScriptのレコードには予約語のラベルとユーザ定義のラベルを混在させることができる
    • 予約語のラベル
      • 例:id, name, number
      • クラスやプロパティなど、システムで使われる予約語
    • ユーザ定義のラベル
      • 予約語以外のラベル
      • スクリプトエディタ上では変数と同じフォーマット(色、フォント)
  • AppleScriptのレコードに対応するAppleScriptObjCのクラスはNSDictionary
    • レコードからNSDictionaryへの変換はdictionaryWithDictionary:などを使って簡単にできる
    • NSDictionaryからレコードへの変換もas recordとキャストして得られる
    • これでCocoaの機能を存分に使える!と思いきや…
  • レコードをNSDictionaryに変換すると予約語の属性がすべて消えてしまうことが判明
    • ユーザ定義のラベルだけがNSDictionaryに認識される
    • 変換時にエラーが発生しないので注意
use framework "Foundation"

set aRecord to {id:7, name:"John", age:24}
--予約語のラベル:id, name
--ユーザ定義のラベル:age

set aDictionary to current application's NSDictionary's dictionaryWithDictionary:aRecord

aDictionary as record
--> {age:24}

aDictionary's allKeys() as list
-->{"age"}

aDictionary's valueForKey:"id"
--> missing value
szk-3
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away