マルチバイト文字を含むURLをエンコードしないでHTTP通信しようとすると落ちる


表題通り、エンコードしないでAlamofireでGETで呼び出すと落ちる。(Alamofireに限らない。)
エラーメッセージが不親切ですぐわかんなかった。
突然の死でした。

環境

  • Swift 2.2
  • Xcode 7.3
  • Alamofire 3.3

現象 / ソースコード

エラー

fatal error: unexpectedly found nil while unwrapping an Optional value

ソースコード

以下メソッドに渡すurlを日本語等のマルチバイト文字を含むものにすると落ちる。

hoge.swift

    func send(url : String){

        Alamofire.request(.GET, url)
            .responseJSON { (response) -> Void in

                guard let object = response.result.value else {
                    return
                }

        }
    }

サンプル呼び出し

hoge.swift
let url = "https://www.google.co.jp/#safe=off&q=あいふぉんクレイドル"
self.send(url)

対策後コード

hoge.swift

    func send(url : String){

        // これ追加👇
        let encodedUrl = url.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLQueryAllowedCharacterSet())!

        Alamofire.request(.GET, encodedUrl)
            .responseJSON { (response) -> Void in
                guard let object = response.result.value else {
                    return
                }
        }
    }

原因/参考

Alamofire crashes when url param contains special character (umlaut) #1195
iOSでパーセントエンコード(Swift)