swift - 将 AppleScript 字符串列表转换为 Swift 数组
问题描述
我有一个复杂的 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") ]>
}
}
解决方案
在@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()
推荐阅读
- html - iframe 的替代品
- javascript - TypeError:this.props.messages.map 不是函数
- python - 如何在前缀上安装 numpy?
- javascript - 通过 html.actionlink 传递 javascript 值
- java - 尝试创建视图时带有 afterburner.fx 的 NullPointer
- excel - 使用powerquery从excel中提取数据
- kubernetes - 有没有一种简单的方法可以从副本集创建 Kubernetes 部署?
- javascript - try/catch 块上未处理的 Promise 拒绝
- symfony - Doctrine QueryBuilder 自定义字段,由两个不同的
- hadoop - 无法编辑 hbase-site.xml