3

私は結果を与えるApplescriptを持っています。しかし、値を文字列にワープすることができないので、それを使用できます。

var set: String = "set windowTile to \"\"\n"
var tell: String = "tell application \"System Events\"\n"
var setFrontApp: String = "set frontApp to first application process whose frontmost is true\n"
var setFrontAppName: String = "set frontAppName to name of frontApp\n"
var tellProcces: String = "tell process frontAppName\n"
var tellFirst: String = "tell (1st window whose value of attribute \"AXMain\" is true)\n"
var setWindowTitle: String = "set windowTitle to value of attribute \"AXTitle\"\n"
var endTellFirst: String = "end tell\n"
var endTellProcess: String = "end tell\n"
var endTell: String = "end tell"
var startAtLoginScript: NSAppleScript = NSAppleScript(source: set + tell + setFrontApp + setFrontAppName + tellProcces + tellFirst + setWindowTitle + endTellFirst + endTellProcess + endTell)     
var scriptResult:NSAppleEventDescriptor = startAtLoginScript.executeAndReturnError(errorInfo)!

NSLog ("%@",  scriptResult)

NSLog は次のようになります。

2015-03-14 15:15:14.001 test[7315:161881] 
<NSAppleEventDescriptor:'utxt'("test.swift")>

実際の結果は文字列「test.swift」です。この結果をアンラップ/解析するにはどうすればよいですか?

これを追加してみました:

var number:Int = 1
let result = scriptResult.descriptorAtIndex(number)

また、メソッドを使用してみましたdescriptorForKeyword(<#keyword: AEKeyword#>)が、AEKeywordを設定するホットがわかりません。

4

2 に答える 2

2

構文を使用if…letして、結果を同時にチェックしnil、値がある場合はアンラップできます。

descriptorAtIndex記述子にはutxtエントリが含まれていないため、必要なものが得られません。これutxtエントリです (印刷するresult.descriptorTypeと、「utxt」の 4 文字のコードが得られます)。したがってstringValue、プレーン文字列の値を取得する必要がありますが、これはオプションであるため、同じでラップを解除できますlet

データのみを出力したい場合はprintln、タイムスタンプなどなしで出力します(実際NSLogには、おそらく望ましくないエラーをコンソールに記録します)

import Foundation

let script = "\n".join([
  "set windowTile to \"\"",
  "tell application \"System Events\"",
    "set frontApp to first application process whose frontmost is true",
    "set frontAppName to name of frontApp",
    "tell process frontAppName",
      "tell (1st window whose value of attribute \"AXMain\" is true)",
        "set windowTitle to value of attribute \"AXTitle\"",
      "end tell",
    "end tell",
  "end tell",
])

var errorInfo: NSDictionary?

if let script = NSAppleScript(source: script),
   let result = script.executeAndReturnError(&errorInfo),
   let text = result.stringValue {
    println(text)
}
else if let error = errorInfo {
    println(error)
}
else {
    println("Unexpected error while executing script")
}
于 2015-03-14T15:11:24.533 に答える
1

scriptResult.stringValue()、 多分?(Swiftはあまり使いません。)

于 2015-03-14T14:36:11.980 に答える