做爲一個iOS developer 忽然想嘗試Mac開發,這是我第一個Mac APPgit
這個軟件目前包含如下功能github
在建立工程的時候選擇macOS->Cocoa Appswift
Apple在Xcode8的時候引入插件開發,雖然很弱雞,可是仍是能實現部分功能的。api
新建target 選擇macOS->Xcode Source Editor Extension緩存
建立名字DeleteEmptyLines
的target會有如下文件安全
info.plist
文件中是target的配置XCSourceEditorCommandName 這裏能夠更名字佈局
SourceEditorExtension.swift
中實現了XCSourceEditorExtension
都是可選方法
extensionDidFinishLaunching
插件在啓動的時候執行commandDefinitions
這個地方會覆蓋info.plist
的設置SourceEditorCommand.swift
中實現了XCSourceEditorCommand
perform
一旦觸發插件的命名,就會觸發此方法,參數invocation:XCSourceEditorCommandInvocation
包含了文本緩存的內容buff
buff.selections
就是選中文本的範圍,buff.lines
是每一行的文本,咱們能夠改變它來改變文本的內容增長如下代碼測試
extension XCSourceEditorCommandInvocation {
var selections: [XCSourceTextRange] {
return buffer.selections as! [XCSourceTextRange]
}
func deleteEmptyLines() {
selections.forEach { (selection) in
let start = selection.startLine
let end = selection.endLine
let emptyIndexs = (start...end)
.filter({ (index) -> Bool in
(buffer.lines[index] as! String).match(regular: "^\\s*$")
})
buffer.lines.removeObjects(at: IndexSet(emptyIndexs))
}
}
}
extension String {
func match(regular: String) -> Bool {
return range(of: regular, options: .regularExpression) != nil
}
}
extension XCSourceTextRange {
var startLine: Int {
return start.line
}
var endLine: Int {
return end.line - (end.column == 0 ? 1 : 0)
}
}
複製代碼
在SourceEditorCommand
中修改perform
方法ui
func perform(with invocation: XCSourceEditorCommandInvocation, completionHandler: @escaping (Error?) -> Void ) {
defer { completionHandler(nil) }
invocation.deleteEmptyLines()
}
複製代碼
選擇要測試的targetspa
選擇Xcode 會有一黑色的Xcode用於測試 任意打開一個項目若是不是這個命名就這樣找: Editor —> Extension bundle display name -> command name
在iOS開發的時候,因爲後臺返回的數據用的是下劃線命名法,而APP使用的是駝峯命名法,因而我作了一個界面來處理。
選擇工程中的Main.storyboard
,在View Controller中拖入兩個TextView,和一個button
調整控件的樣式,加上佈局約束。寫成喜歡的樣式-,-
綁定這些控件到ViewController代碼中
在convert
方法中寫轉換的代碼就好了,代碼較長放在文章末尾的GitHub連接。
有一個細節須要注意,macOS在輸入引號的時候會自動轉爲Json不能解析的格式,因此須要設置
NSTextView
的isAutomaticQuoteSubstitutionEnabled
爲false
在左邊放入Json,點擊轉換。
本文版權屬於再惠研發團隊,歡迎轉載,轉載請保留出處。@白爾摩斯