Конвертировать список строк AppleScript в массив Swift - PullRequest
0 голосов
/ 06 апреля 2019

У меня сложный AppleScript, который возвращает список строк, к которым мне нужно получить доступ из Swift. Я свел это к простому примеру, и я просто не могу понять, как сопоставить строки AppleScript с массивом строк Swift.

let listOfStringsScript = """
                          set listOfStrings to { "one", "two", "three" }
                          """

 if let scriptObject = NSAppleScript(source: listOfStringsScript) {
    var errorDict: NSDictionary? = nil
    let resultDescriptor = scriptObject.executeAndReturnError(&errorDict)

    if errorDict == nil {
      // TODO: convert the resultDescriptor (NSAppleEventDescriptor) into an array of strings
      print(resultDescriptor)
      // OUTPUT: <NSAppleEventDescriptor: [ 'utxt'("one"), 'utxt'("two"), 'utxt'("three") ]>
    }
}

1 Ответ

0 голосов
/ 06 апреля 2019

Ответ с помощью @Alexander и @MartinR:

extension NSAppleEventDescriptor {

  func toStringArray() -> [String] {
    guard let listDescriptor = self.coerce(toDescriptorType: typeAEList) else {
      return []
    }

    return (0..<listDescriptor.numberOfItems)
      .compactMap { listDescriptor.atIndex($0 + 1)?.stringValue }
  }

}

...

let resultDescriptor = scriptObject.executeAndReturnError(&errorDict)
let subjectLines = resultDescriptor.toStringArray()
...