LoginSignup
24
21

More than 5 years have passed since last update.

[OSX]Swift標準入出力

Last updated at Posted at 2015-12-06

スクリプト言語の代わりにcommand-line環境でSwiftを利用するため、引数の取得や標準入出力について調べてみた。

引数の取得は以下の通り。

let args = Process.arguments
for arg in args {
    print(arg)
}

標準入力からreturnされるまでを読み込むのは以下の通り。

let standardInput = NSFileHandle.fileHandleWithStandardInput()
let input = standardInput.availableData
let datastring = String(NSString(data:input, encoding:NSUTF8StringEncoding))
print(datastring)

return単位で読み込み続ける場合は、以下となる。

let standardInput = NSFileHandle.fileHandleWithStandardInput()
while true {
    let input = standardInput.availableData
    if input.length == 0 { break }
    let datastring = String(NSString(data:input, encoding:NSUTF8StringEncoding))
    print(datastring)
}

上記は、空行が来るとループを抜ける。

標準出力への印字は以下の通り。

let standardOutput = NSFileHandle.fileHandleWithStandardOutput()
let outputString: NSString = "hello\n"
let dataout: NSData? = outputString.dataUsingEncoding(NSUTF8StringEncoding)
if let dout = dataout {
    standardOutput.writeData(dout)
}

同じ文字列を標準エラー出力に印字する場合。

let standardError = NSFileHandle.fileHandleWithStandardError()
if let dout = dataout {
    standardError.writeData(dout)
}

後で流用できるよう、これらを全部つなげた完全なスクリプトを載せる。

#!/usr/bin/env xcrun swift

import Foundation

let args = Process.arguments
for arg in args {
    print(arg)
}

let standardInput = NSFileHandle.fileHandleWithStandardInput()
//while true {
    let input = standardInput.availableData
    // if input.length == 0 { break }
    let datastring = String(NSString(data:input, encoding:NSUTF8StringEncoding))
    print(datastring)
//}

let standardOutput = NSFileHandle.fileHandleWithStandardOutput()
let outputString: NSString = "hello\n"
let dataout: NSData? = outputString.dataUsingEncoding(NSUTF8StringEncoding)
if let dout = dataout {
    standardOutput.writeData(dout)
}

let standardError = NSFileHandle.fileHandleWithStandardError()
if let dout = dataout {
    standardError.writeData(dout)
}

/* End Of File */

関連情報
Cocoa Advent Calendar 2015

Swift Blog

Swift Programming Series (iBooks Store)

The Swift Programming Language

Swift Standard Library Reference

Start Developing iOS Apps

Using Swift with Cocoa and Objective-C

【Cocoa練習帳】
http://www.bitz.co.jp/weblog/

http://ameblo.jp/bitz/(ミラー・サイト)

24
21
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
24
21