swift3+OSX開発格闘記第8回「swift2では動くのにswift3では動かない」

Author:

数ヶ月前swift3が出たのですよ。
で、xcodeも更新されたのでデフォルトでこれに合わせていくのが筋なのですが。
なかなかに厳しい。
けっこう言語仕様が変わってまして。

例えば適当に検索して出てきた正規表現プログラム。

let regex: NSRegularExpression
do {
    let pattern = "ptn"
    regex = try NSRegularExpression(pattern: pattern, options: [NSRegularExpressionOptions.{オプション}])
    let string = "moji"
    let results: [NSTextCheckingResult] = regex.matchesInString(string, options: [], range: NSMakeRange(0, string.characters.count))

    var matchStrings = [String]()
    for (idx, result) in results.enumerate() {
        let range = result.rangeAtIndex(idx)
        if range.location != NSNotFound {
            let matchString = (string as NSString).substringWithRange(range) as String
            if !matchString.isEmpty {
                matchStrings.append(matchString)
            }
        }
    }
} catch let error as NSError {
    // エラー処理
}

はい、動きません。
色々警告が出てくれるのですぐに直せますが、実際はこうなります。

    let regex: NSRegularExpression
    do {
        let pattern = ""
        regex = try NSRegularExpression(pattern: pattern, options: [])
        let string = ""
        let results: [NSTextCheckingResult] = regex.matches(in: string, options: [], range: NSMakeRange(0, string.characters.count))
        
        var matchStrings = [String]()
        for (idx, result) in results.enumerated() {
            let range = result.rangeAt(idx)
            if range.location != NSNotFound {
                let matchString = (string as NSString).substring(with: range) as String
                if !matchString.isEmpty {
                    matchStrings.append(matchString)
                }
            }
        }
    } catch let error as NSError {
        // エラー処理
    }

おそらくswift2.1とかだったら動いていたんだけどねえ。
で、検索して出てくるのはほとんどswift2系。
なかなかイラッとしますね。

他にも、NSCalendar。
これはswift3じゃ動きません。

NSCalendar(calendarIdentifier: NSGregorianCalendar)

こんな感じに関数名が変わったりすることがしばしばあるのでご注意を。
まあ大抵はwarningのサジェストどおりに直せばいいんだけど。

第1回「ぐぐって出てくるのはどれもこれもiOS」
第2回「配列を渡すとインスタンスがコピーされた」
第3回「初期化しないメンバ変数なんて許しません」
第4回「NSStringとString、NSURLとUrl」
第5回「for文が、++が、、、」
第6回「ビルドおもーい」
第7回「do、try、catch」
第8回「swift2では動くのにswift3では動かない」
第9回「ふおおWindowsFormみたい」
第10回「Labelの値を変える」
第11回「windowControllerとViewControllerとView」
第12回「ボタンはViewController、メニューはDelegate」
第13回「TreeViewのしんどさ」
第14回「¥nマークは改行しません」
第15回「instantiateじゃ駄目ぇ」
第16回「ScrollViewの中にTextView」
第17回「ファイルをどう読み書きすればいいんじゃ」
第18回「右クリック・・・」
第19回「isIntなんて無いです」
第20回「anyはswitchでキャスト」
第21回「MessageBox.Show」
第22回「BezierはViewの中で」
第23回「512pxのアイコンを用意せよ」
第24回「アーカイブ作成」
第25回「これから始める人へ」

Facebook にシェア
Pocket