開発環境
- OS X Mavericks - Apple(OS)
- Xcode 6.0 Beta 6
- Swift (プログラミング言語)
Head First C ―頭とからだで覚えるCの基本(David Griffiths (著)、Dawn Griffiths (著) 中田 秀基(監訳)(翻訳)、木下 哲也 (翻訳)、オライリージャパン)の6章(データ構造と動的メモリ: 架け橋を築く)、自分で考えてみよう(p.289)をSwiftで考えてみる。
自分で考えてみよう(p.289)
C言語と違ってGC(Garbage collection)があるから、Pythonのコードの時と同様に、ポインタ、ヒープ領域のメモリ空間の取得の取得、解放を気にする必要がない?
コード(Xcode)
main.swift
// // main.swift // sample289 // // Created by kamimura on 9/5/14. // Copyright (c) 2014 kamimura. All rights reserved. // import Foundation // GC(がベージコレクション)があるから、C言語みたいにメモリーの解放を気にする必要はない class Island { let name:String let opens:String let closes:String var next:Island? init(name:String, opens:String = "9:00", closes:String = "17:00", next:Island? = nil) { self.name = name self.opens = opens self.closes = closes self.next = next } func display() { println("名前:\(self.name)\n 営業時間:\(self.opens)-\(self.closes)") self.next?.display() } } var start:Island? var i:Island? var next:Island? while true { let name:String = input() if name == "" { break } next = Island(name: name) if start == nil { start = next } else { i?.next = next } i = next } start?.display()
stdio.swift
// // stdio.swift // stdio // // Created by kamimura on 8/21/14. // Copyright (c) 2014 kamimura. All rights reserved. // import Foundation // 標準入力(STDIN)から読み込む func input(msg:String = "") -> String { print(msg) var in_fh = NSFileHandle.fileHandleWithStandardInput() var data = in_fh.availableData var s = NSString(data: data, encoding: NSUTF8StringEncoding) s = s.substringToIndex(s.length - 1) return s } func read(path:String) -> String? { return String.stringWithContentsOfFile(path) } func print(s:String, path:String, end:String = "\n") { (s + end).writeToFile(path, atomically: true, encoding: NSUTF8StringEncoding, error: nil) } func error(msg:String) { let stderr = NSFileHandle.fileHandleWithStandardError() stderr.writeData((msg + "\n").dataUsingEncoding(NSUTF8StringEncoding)!) exit(1) } // コマンドライン引数 let argv:[String] = NSProcessInfo.processInfo().arguments.map({(x:AnyObject) -> String in x as String})
入出力結果(Console Output, Terminal)
$ ./sample289 アトランティス ティッチマーシュ島 名前:アトランティス 営業時間:9:00-17:00 名前:ティッチマーシュ島 営業時間:9:00-17:00 $
0 コメント:
コメントを投稿