前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >更多关于CocoaScript目录

更多关于CocoaScript目录

作者头像
iOSDevLog
发布2018-05-17 10:50:23
1.3K0
发布2018-05-17 10:50:23
举报
文章被收录于专栏:iOSDevLog

Sketch插件可以通过MochaCocoaScript实现,它允许您使用JavaScript编写的外部脚本使用Objective-C / Cocoa代码。该桥负责JavaScript和Cocoa之间的翻译,因此您可以专注于重要的部分(即使Sketch成为可怕的东西)。

来自CocoaScript的自述文件:

CocoaScript建立在Apple的JavaScriptCore之上,这是与Safari相同的JavaScript引擎。所以,当你在CocoaScript中编写代码时,你确实在编写JavaScript。 CocoaScript还包含一个桥梁,可让您通过JavaScript访问Apple的Cocoa框架。这意味着除了标准JavaScript库之外,您还可以使用许多精彩的类和函数。

JavaScript环境

您的插件脚本不会在浏览器中运行,但会在JavaScriptCore上下文中运行。因此它运行的JavaScript环境有点不常见。

  • JavaScript的标准库可用。
  • 其他的都不是。这意味着setTimeoutfetchconsole等都是不可用。
  • NodeJS核心模块不可用。

话虽这么说,如果你使用skpm,它会自动填充工具有些事情你:consolesetTimeoutsetIntervalfetch

访问Cocoa和Sketch API

您可以从CocoaScript访问所有Cocoa和Sketch API。

Objective-C属性的行为与在桥的JavaScript端应该一样。

Objective-C方法作为对象的不透明JavaScript代理的属性公开。

将选择器名称转换为JavaScript属性名称时采取以下步骤:

  • 所有冒号都转换为下划线(最新的下划线是可选的)。
  • 选择器的每个组件都连接成一个没有分隔的字符串。

这样,一个选择器如executeOperation:withObject:error:转换为函数名称executeOperation_withObject_error()

例如,如果你想打开一个File Picker面板,你可以使用NSOpenPanel类:

代码语言:javascript
复制
var openPanel = NSOpenPanel.openPanel()
openPanel.setCanChooseDirectories(false)
openPanel.setCanChooseFiles(true)
openPanel.setCanCreateDirectories(false)
openPanel.setDirectoryURL(NSURL.fileURLWithPath('~/Documents/'))

openPanel.setTitle('Choose a file')
openPanel.setPrompt('Choose')
openPanel.runModal()

如果您需要更多关于Cocoa的信息,请查看参考资料部分。

一些特定的全局变量

指针

对于某些Obj-C选择器,您可能需要传递一个指针。这在JavaScript中不存在,所以有一种全局方法来创建一个:

代码语言:javascript
复制
var ptr = MOPointer.alloc().init()
var ptrToSomething = MOPointer.alloc().initWithValue(something)

长时间运行脚本

如果您的脚本正在进行异步操作,我们需要告诉Sketch保留它并且不要垃圾收集它。

你可以通过访问COScript

代码语言:javascript
复制
COScript.currentCOScript().shouldKeepAround = true

脚本完成其工作后,不要忘记释放它:

代码语言:javascript
复制
COScript.currentCOScript().shouldKeepAround = false

下一步

有关这座桥如何运作的更多信息,请查看Mocha README,它确实是完整的(但需要一些Obj-C的概念)。

原文:https://developer.sketchapp.com/guides/cocoascript/

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018.03.21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • JavaScript环境
  • 访问Cocoa和Sketch API
  • 一些特定的全局变量
    • 指针
      • 长时间运行脚本
      • 下一步
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档