CocoaScript

CocoaScript 是一个桥接,提供在 JavaScript 中访问 Sketch 内部 API 和 macOS 框架的功能。

来自 CocoaScript 的 README

CocoaScript 构建在 Apple 的 JavaScriptCore 之上,与为 Safari 提供动力的 JavaScript 引擎相同。因此,当您使用 CocoaScript 编写代码时,实际上是在编写 JavaScript 代码。

CocoaScript 还包含一个桥接,使您可以从 JavaScript 访问 Apple 的 Cocoa 框架。这意味着除了标准的 JavaScript 库之外,您还可以使用大量优秀的类和函数。

语法

Objective-C 的方括号语法在 JavaScript 中转换为点语法。在内部,CocoaScript 创建不透明的 JavaScript 代理对象,这些对象具有以下属性

  • Objective-C 属性导出到 JavaScript
    • 获取器:object.name()
    • 设置器:object.name = 'Sketch'
  • Objective-C 选择器作为 JavaScript 代理的方法公开。
  • : 转换为 _,最后一个下划线是可选的。
  • 使用下划线调用方法需要加倍:sketch_method 变成 sketch__method
  • 选择器的每个组件都连接成一个没有分隔符的单个字符串。

Objective-C

[executeOperation:withObject:error:]

JavaScript

executeOperation_withObject_error()

指针

一些 Objective-C 选择器需要指针参数。由于 JavaScript 不支持通过引用传递对象,因此 CocoaScript 提供了 MOPointer,这是一个代理对象,用于从变量创建引用。

let str = NSMutableString.alloc().init()
let pointer = MOPointer.alloc().initWithValue(str)

str.setString('Hello Sketch')
console.log(pointer.value())

str.appendString(' 👋')
console.log(pointer.value())

使用 macOS 框架

要使用 macOS 框架,需要先导入它。请注意,FoundationCoreGraphics 默认导入。

framework('AVFoundation')

let url = NSURL.alloc().initWithString(
  'https://cdn.sketchapp.com/assets/pages/home/prototyping-video1.mp4'
)
let asset = AVAsset.assetWithURL_(url)

console.log(asset)

阅读有关如何使用 CocoaScript 和 macOS 框架的更多信息。