20171115

睡眠

4:00入眠 11:00起床
7時間睡眠 睡眠負債は5.5h

itっぽいこと

テスト駆動10章途中
クラスベースの実装とprotocolベースstructでの実装が完全に別れてきていて
これはもう本の内容は細かく再現させない方向で行きたくなってきた

その他

日誌はコピーして編集するはてなブログの新機能との相性がいいみたい

20171111

睡眠

2:30就寝 11:30起床 9時間睡眠

7時間睡眠をベースとして睡眠収支は-6.5h

 

itっぽい

backlog(無料アカウント)でプロジェクト作った

テスト駆動開発のためのリポジトリを作った

 

その他

k780キーボードをmacに繋げるとus入力に強制的に切り替わる事象をunifying接続することで解決した。bluetooth接続だとキーボードセットアップアシスタントが立ち上がらない罠に捕まっていた。

laravel homestead(windows10) postgres接続設定

.envの以下の項目を変更

DB_CONNECTION=pgsql

DB_PORT=5432

php artisan migrate でmigration配下のファイルが実行される

postgresへのログイン?はデフォルトでは

psql -U homestead -h localhost で行う。

 

Set<String>をCharcterSetに置き換える

// before
    var japaneseChars : Set<String> {
        return Set(japaneseNumericalChars.keys)
    }

// after
    var japaneseChars : CharacterSet {
        return CharacterSet(charactersIn: japaneseNumericalChars.keys.joined())
    }

characterSetはSetとほぼ同じように使えるが、containsメソッドでStringを引数に使えないので、以下のようにrangeOfCharacter(from searchSet: CharacterSet) を使う

// before 
    func checkType(_ str : String) -> Int {
        
        switch str {
        case str where japaneseChars.contains(str):
            return 0
        case str where japaneseExpChars.contains(str):
            return 1
        default:
            return 2
        }
    }

// after 
    func checkType(_ str : String) -> Int {
        
        switch str {
        case str where str.rangeOfCharacter(from: japaneseChars) != nil:
            return 0
        case str where str.rangeOfCharacter(from: japaneseExpChars) != nil:
            return 1
        default:
            return 2
        }
    }


参考 :
rangeOfCharacter(from:) - NSString | Apple Developer Documentation
stackoverflow.com

Stringのextensionにcomputed propertyをつくる

before :

extension String {
    func numeralsToNumber() -> String {
        enum Chartype {
            case numerical
            case exp
            case normal
            
            init(_ number : Int) {
                switch number {
                case 0,1:
                    self = .numerical
//                case 1:
//                    self = .exp
                default:
                    self = .normal
                }
            }
        }
        
        let japaneseNumericalChars : [String : String] = [
            "〇": "0",
            "一": "1",
            "二": "2",
            "三": "3",
            "四": "4",
            "五": "5",
            "六": "6",
            "七": "7",
            "八": "8",
            "九": "9",
            ]
        let japaneseChars : Set = Set(japaneseNumericalChars.keys)

        let japaneseNumericalExpChars : [String : String] = [
            "十": "1",
            "百": "2",
            "千": "3",
            "万": "4",
            "億": "8",
            ]
        let japaneseExpChars : Set = Set(japaneseNumericalExpChars.keys)
        
        var splitedStr : [String] = []
        // 以下略

after :

extension String {
    var japaneseNumericalChars : [String : String] {
        return  [
            "〇": "0",
            "一": "1",
            "二": "2",
            "三": "3",
            "四": "4",
            "五": "5",
            "六": "6",
            "七": "7",
            "八": "8",
            "九": "9",
        ]
    }
    
    var japaneseChars : CharacterSet {
        return CharacterSet(charactersIn: japaneseNumericalChars.keys.joined())
    }
    
    private func convertCharToStr1To9(_ char : Character) -> String {
        return japaneseNumericalChars[char.description]!
    }
    
    var japaneseNumericalExpChars : [String : String] {
        return  [
            "十": "1",
            "百": "2",
            "千": "3",
            "万": "4",
            "億": "8",
        ]
    }
    
    var japaneseExpChars : CharacterSet {
        return CharacterSet(charactersIn: japaneseNumericalExpChars.keys.joined())
    }
    
    private func convertExpStrToNumStr(_ str : String) -> String {
        return japaneseNumericalChars[str]!
    }
    
    enum Chartype {
        case numerical
        case exp
        case normal
        
        init(_ number : Int) {
            switch number {
            case 0,1:
                self = .numerical
            default:
                self = .normal
            }
        }
    }
    
    func numeralsToNumber() -> String {
        
        var splitedStr : [String] = []
        // 以下略

computed propertyはletでできないとかdictionaryプロパティに直接アクセスできないから専用のメソッドを作ったりしないといけないとか色々あったけど大きな問題はなく実装できた。