flyingbirdのiPhoneアプリ開発記録

- PolyRhythmの中の人がiPhoneアプリ開発中に思ったことを記録するブログです -

【swift4】substring(to:)がdeprecated!!

使いにくかったsubstringが・・・

  • swiftというと、substringが非常に使いづらかったんですが、

xcode9にバージョンアップすると以下の注意が表示されました。

'substring(to:)' is deprecated: Please use String slicing subscript with a 'partial range upto' operator.


で、なにこれ・・・

  • 文字列の最後の1文字を削りたい場合、以下のようにsubstringで文字列の最後の1文字を削ってたのですが、次のように書き換えないと、そのうちコンパイルが通らなくなるっぽいですね。swift5?
    ムムム・・・
"hoge!".substring(to: "hoge!".index("hoge!".endIndex, offsetBy: -1))

↓↓↓

String("hoge!"[..<"hoge!".index("hoge!".endIndex, offsetBy: -1)])


ちがう・・

  • 上のじゃなんだかわからない。
    indexはおいといて、substringは下の様に書き換えよ・・・とのことか。
    使いやすくなるのかと思いきや、シンタックスシュガー的なノリなのか?
let index = "hoge!".index("hoge!".endIndex, offsetBy: -1)

"hoge!".substring(to: index)
↓↓↓↓↓
"hoge!"[..<index]


  • ちなみにsubstringの場合はString型が返ってくるが、[]の場合は、String.SubSequence型が返ってくる
    String型にしたい場合は、Stringで作り直せば良い
Cannot convert value of type 'String.SubSequence' (aka 'Substring') to expected argument type 'String'
Cannot convert return expression of type 'Character' to return type 'String'
Cannot subscript a value of type 'String'
Cannot assign value of type 'String.SubSequence' (aka 'Substring') to type 'String'
↑↑↑↑↑ こんなエラーが出た場合
↓↓↓↓↓ こんな感じで作り直す
String("hoge!"[..<index])


他は?

  • substring(from:)の場合
'substring(from:)' is deprecated: Please use String slicing subscript with a 'partial range from' operator.
let index = "!hoge".index(after: "!hoge".startIndex)

"!hoge".substring(from: index)
↓↓↓↓↓
"!hoge"[index...]


  • substring(with:)の場合
'substring(with:)' is deprecated: Please use String slicing subscript.
let hoge = "!hoge!"
let start = hoge.index(hoge.startIndex, offsetBy: 1)
let end = hoge.index(hoge.endIndex, offsetBy: -1)

hoge.substring(with: Range(start..<end))
↓↓↓↓↓
hoge[start..<end]


参考サイト

developer.apple.com