NSTask를 통한 scala 스크립트 실행(프로그래밍 학습용 어플리케이션 제작)
7616 단어 Swift
하지만 편집자와 함께 터미널을 왕복하는 것은 좀 번거롭다.
두 개의 창이 있으면 다양한 조작이 증가할 것이다.이를 위해 공간을 옮기는 데만 몇 초가 걸린다.
아이디를 쓰면 되지만 이쪽은 사이즈가 거의 다 커서'맥북 공부 좀 하자'는 용도가 과장될 수 있어요.더 쉽게 말하면'우측에 출력이 있고 왼쪽에 쓰여 있으며 키보드 단축키로 실행하면 충분하다'는 것이다.
그럼 NSTask로 쉽게 만들 수 있을 것 같은데.
그래서 실제로 했어요.
보안이나 오류를 고려하지 않으면 왼쪽 커맨드 + R에 40줄을 써서 실행할 수 있습니다.
방법
기본적으로 NSTask 를 이동하면 쓰기 작업이 그대로 출력됩니다.
ViewController.그리고 메뉴를 통해서 이걸 부르세요.
run()
간단한 방법으로 (1) 텍스트를 저장하고, (2) 저장된 파일을 scala에 건네주고, (3) 작업이 끝난 후에 결과를 읽고, (4) 데이터를 변환하는 것이다.import Cocoa
class ViewController: NSViewController {
@IBOutlet var editor: NSTextView! {
didSet {
editor.automaticTextReplacementEnabled = false
}
}
@IBOutlet var output: NSTextView!
@IBAction func run(sender: NSMenuItem) {
let task = NSTask()
let output = NSPipe()
let error = NSPipe()
let name = "scEditor" + NSDate().timeIntervalSince1970.description
if let path = NSTemporaryDirectory().stringByAppendingPathComponent(name).stringByAppendingPathExtension("scala") {
editor.string?.writeToFile(path, atomically: false, encoding: NSUTF8StringEncoding, error: nil)
task.standardOutput = output
task.standardError = error
task.launchPath = "/usr/local/bin/scala"
task.arguments = [path]
task.launch()
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) {
task.waitUntilExit()
let result = output.toString() + error.toString()
dispatch_async(dispatch_get_main_queue()) {
self.output.string = result
}
}
} else {
println("error")
}
}
}
extension NSPipe {
func toString() -> String {
let data = self.fileHandleForReading.availableData
return NSString(data: data, encoding: NSUTF8StringEncoding) ?? ""
}
}
키보드 단축키는 메뉴에서 설정할 수 있습니다.
모피에 압력 응답기를 주다.그냥 부르라고.
그런 다음 출력 연결로 이동할 수 있도록 두 텍스트 뷰를 적절하게 배치합니다.
Reference
이 문제에 관하여(NSTask를 통한 scala 스크립트 실행(프로그래밍 학습용 어플리케이션 제작)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/tottokotkd/items/fc160722f3f80377ac5c
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
import Cocoa
class ViewController: NSViewController {
@IBOutlet var editor: NSTextView! {
didSet {
editor.automaticTextReplacementEnabled = false
}
}
@IBOutlet var output: NSTextView!
@IBAction func run(sender: NSMenuItem) {
let task = NSTask()
let output = NSPipe()
let error = NSPipe()
let name = "scEditor" + NSDate().timeIntervalSince1970.description
if let path = NSTemporaryDirectory().stringByAppendingPathComponent(name).stringByAppendingPathExtension("scala") {
editor.string?.writeToFile(path, atomically: false, encoding: NSUTF8StringEncoding, error: nil)
task.standardOutput = output
task.standardError = error
task.launchPath = "/usr/local/bin/scala"
task.arguments = [path]
task.launch()
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) {
task.waitUntilExit()
let result = output.toString() + error.toString()
dispatch_async(dispatch_get_main_queue()) {
self.output.string = result
}
}
} else {
println("error")
}
}
}
extension NSPipe {
func toString() -> String {
let data = self.fileHandleForReading.availableData
return NSString(data: data, encoding: NSUTF8StringEncoding) ?? ""
}
}
Reference
이 문제에 관하여(NSTask를 통한 scala 스크립트 실행(프로그래밍 학습용 어플리케이션 제작)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/tottokotkd/items/fc160722f3f80377ac5c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)