2014年8月26日火曜日

開発環境

初めてのPerl 第6版 (Randal L. Schwartz (著)、brian d foy (著)、Tom Phoenix (著)、近藤 嘉雪 (翻訳)、オライリージャパン)、16章(プロセス管理)の16.9(練習問題)3.をSwiftで考えてみる。

16.9(練習問題)3.

コード(Xcode)

main.swift

//
//  main.swift
//  sample3
//
//  Created by kamimura on 8/26/14.
//  Copyright (c) 2014 kamimura. All rights reserved.
//

import Foundation

let date = NSDate()
let calendar = NSCalendar.currentCalendar()
let comp = calendar.component(NSCalendarUnit.WeekdayCalendarUnit, fromDate:date)
let wday:String =  calendar.weekdaySymbols[comp - 1] as String

if wday.indexAt(0) == "S" {
    println("go play")
} else {
    println("get to work")
}


let reg = NSRegularExpression(pattern: "^S.*", options: nil, error: nil)

if reg.matchesInString(wday, options: nil, range:NSRange(location: 0, length: wday.length)).isEmpty {
    println("get to work")
} else {
    println("go play")
}

for w in calendar.weekdaySymbols {
    let wday:String = w as String
    println(wday)
    if reg.matchesInString(wday, options: nil, range:NSRange(location: 0, length: wday.length)).isEmpty {
        println("get to work")
    } else {
        println("go play")
    }
}

string.swift

//
//  string.swift
//  string
//
//  Created by kamimura on 8/10/14.
//  Copyright (c) 2014 kamimura. All rights reserved.
//

import Foundation

extension String {
    var swapcaseString:String {
    var result: String = ""
        for ch in self {
            let s = String(ch)
            result += s.uppercaseString == s ? s.lowercaseString : s.uppercaseString
        }
        return result
    }
    var isUpper:Bool { return self.uppercaseString == self }
    var isLower:Bool { return self.lowercaseString == self }
    var length:Int { return (self as NSString).length }
    var strip:String { return self.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet())}
    var floatValue:Float { return (self as NSString).floatValue }
    var doubleValue:Double { return (self as NSString).doubleValue }
    func count(sub:String) -> Int {
        var result:Int = 0
        var s = self
        let index:String.Index = "a".endIndex
        while s != "" {
            if s.hasPrefix(sub) {
                result += 1
                s = s.substringFromIndex(sub.endIndex)
            } else {
                s = s.substringFromIndex(index)
            }
            
        }
        return result
    }
    func find(sub:String, start:Int = 0, end:Int? = nil) -> Int {
        var s = self as NSString
        var s_temp = s.substringFromIndex(start)
        let end_temp:Int = end ? end! : s.length
        for i in start..<end_temp {
            if (s_temp.hasPrefix(sub)) {
                return i
            }
            s_temp = s.substringFromIndex(i + 1) as NSString
        }
        return -1
    }
    func indexAt(i:Int) -> String {
        if i >= 0 {
            return (self as NSString).substringWithRange(NSRange(location: i, length: 1))
        }
        let new_i = self.length + i
        return (self as NSString).substringWithRange(NSRange(location: new_i, length: 1))
    }
    func replace(old_str:String, new_str:String) -> String {
        return self.stringByReplacingOccurrencesOfString(old_str, withString: new_str)
    }
    func slice(start:Int=0, end:Int?=nil) -> String {
        let s = self as NSString
        var new_end:Int
        if (end) {
            new_end = end!
        } else {
            new_end = s.length
        }
        return  s.substringWithRange(NSRange(location: start, length:new_end - start))
    }
    func split(sep:String = "") -> [String] {
        var result:[String] = []
        if (sep == "") {
            for ch in self {
                result.append(String(ch))
            }
            return result
        }
        var s:String = self
        var len = sep.length
        var temp:String = ""
        while s != "" {
            if s.hasPrefix(sep) {
                if temp != "" {
                    result.append(temp)
                    temp = ""
                }
                s = s.slice(start: len)
            } else {
                temp += s.slice(start: 0, end: 1)
                s = s.slice(start: 1)
            }
        }
        if temp != "" {
            result.append(temp)
        }
        return result
    }
    var reversed:String { return "".join(self.split().reverse()) }
}

入出力結果(Console Output)

get to work
get to work
Sunday
go play
Monday
get to work
Tuesday
get to work
Wednesday
get to work
Thursday
get to work
Friday
get to work
Saturday
go play
Program ended with exit code: 0

0 コメント:

コメントを投稿