Cocoa ObjectをキーにしたDictionaryから、Cocoa Objectでキー検索を行い、キーが合致する要素に定義されているオブジェクトを取得するAppleScriptです。
AppleScriptのrecord型変数は、本当に基本的な機能しか用意されておらず、
{keyLabel1:value1, keyLabel2:value2, keyLabel3:value3 }
のような、キーとなるラベルには「空白文字や使用禁止文字を含まない」文字しか使えませんし、キーに何らかのオブジェクトを指定することはできません。
そんな中、macOS 10.10でCocoa Scriptingが標準搭載されたため、CocoaのNSDictionaryを調べて「へー、キーにオブジェクトが使えるのか!」などと喜んでいました(macOS 10.10が出た頃)。
{Cocoa Object 1:value1, Cocoa Object 2:value2, Cocoa Object 3:value3 }
{Cocoa Object 1:some object 1, Cocoa Object 2:some object 2, Cocoa Object 3:some object 3 }
ちょうどそういう(CocoaオブジェクトをキーにしたDictionaryの検索)プログラムを組もうとして、Dictionaryから「valueForKey:」でvalueを取り出そうとして(エラーに遭遇して)試行錯誤していました。
(NSDictionary) { NSCalibratedRGBColorSpace 0 1 0 1:"Green", NSCalibratedRGBColorSpace 0 0 1 1:"Blue", NSCalibratedRGBColorSpace 1 0 0 1:"Red" }
実際にはこれは「objectForKey:」で取り出さないとエラーになってしまうんですね。その確認のために書いた基礎確認用のAppleScriptです。やっぱり、基礎の再確認はとても大事です。
AppleScript名:Cocoa ObjectをキーにしたDictionaryから合致するObjectを取得 |
— – Created by: Takaaki Naganoya – Created on: 2019/07/06 — – Copyright © 2019 Piyomaru Software, All Rights Reserved — use AppleScript version "2.4" — Yosemite (10.10) or later use framework "Foundation" use framework "AppKit" use scripting additions set aCol to current application’s NSColor’s redColor() set bCol to current application’s NSColor’s greenColor() set cCol to current application’s NSColor’s blueColor() set aDict to current application’s NSMutableDictionary’s new() aDict’s addObject:"Red" forKey:aCol aDict’s addObject:"Green" forKey:bCol aDict’s addObject:"Blue" forKey:cCol set dCol to current application’s NSColor’s blueColor() set aRes to (aDict’s objectForKey:dCol) as string –> "Blue" |
More from my site
(Visited 49 times, 1 visits today)