Как передать строковый параметр в обработчик AppleScript в swift (appleScriptObjC framework)? - PullRequest
0 голосов
/ 23 февраля 2019

У меня есть обработчик объекта сценария AppleScript (для номеров приложения), который принимает строку в качестве ввода для изменения диапазона выбора.Я знаю, что AppleScript может принимать переменные параметры из swift как экземпляр NSAppleEventDescriptor, но когда я передаю его обработчику, я получаю эту ошибку.

Это строка, передающая переменную:

numbersScript.selectionRange(_: NSAppleEventDescriptor.init(string: "A3"))

Это ошибка, которую я получаю:

Can’t make «class ocid» id «data optr0000000000C0260000600000» into type list, record or text. (error -1700)

Вот код для NumbersScript.applescript:

    script NumbersScriptObj
    property parent: class "NSObject"
    property demoProp: "Default Property Value"

    on demoHandler()
        tell me to log my demoProp
    end demoHandler


    on selectionRange_(mySelectionRange)
        tell application "Numbers"
            activate
            set boy to "F20"
            mySelectionRange as text
            set girl to mySelectionRange & ":" & boy
            tell the first table of the active sheet of document 1
                set the selection range to range girl
            end tell
        end tell
    end selectionRange

end script

Вот ApplescriptProtocol.swift:

    import Foundation

@objc(NSObject) protocol AppleScriptProtocol {
    var demoProp: NSString { get set }
    func demoHandler()
    func selectionRange(_: NSAppleEventDescriptor)
}

Вот что такое NumbersScript.swift:

import Foundation
import AppleScriptObjC

class NumbersScript {
    static func load() {
        Bundle.main.loadAppleScriptObjectiveCScripts()
    }
    static func numbersFunction() -> AnyObject {
        let ScriptObj = NSClassFromString("NumbersScriptObj") as NSObject.Type
        let obj = ScriptObj!.init()
        return obj as AnyObject
    }
    init() {
    }
}

Вот главный main.swift:

import Foundation
import CoreFoundation
import ScriptingBridge
import AppleScriptObjC

let myFirstSelectionRange = NSAppleEventDescriptor(string: "A4:B6")

NumbersScript.load()

let numbersScript = NumbersScript.numbersFunction() as! AppleScriptProtocol

numbersScript.demoProp = "prop value from app delegate" as NSString

numbersScript.demoHandler()

numbersScript.selectionRange(_: NSAppleEventDescriptor.init(string: "A3"))
...