「空のURL文字列、ファイルパスなんて渡さないだろう」っていうツッコミはさておき、 NSURL 、 URL それぞれに空文字を init(string:)
とinit(fileURLWithPath:)
に渡した時の挙動をみてみます。
挙動を確認してみる
playgroundでも良かったのですが、今回は適当なproject作って、AppDelegateでログ出力する形でサッと確認しました。
print(NSURL(string: "")) // 1
print(URL(string: "")) // 2
print(NSURL(fileURLWithPath: "")) // 3
print(URL(fileURLWithPath: "")) // 4
結果
- 1(NSURL) -> Optional()
- 2(URL) -> nil
- 3(NSURL) -> クラッシュする
- 4(URL) -> ./ – file:///
となりました。
特に、URL(string: "")
が nil を返すようになったので、以下のように force unwrap(!) を使っていた箇所を素直に書き換えて、空文字が渡ってしまった時は泣くことになります。
let urlString = ""
let url = NSURL(string: urlString)!
// ↓ Swift 3への書き換え
let url = URL(string: urlString)! // crash!!!
書き換えは慎重に
それぞれ挙動がNSのprefixが付いている/付いていないで異なるので、
Swift2からSwift3へ書き換える時は注意ですね。