close

[Swift5]忘れやすい書き方の備忘録[随時更新]

公開日:

Swift5の様々な記述方法、処理方法をまとめています。
Xcode 11.2.1

配列中の特定の値がある要素のindexを取得

firstIndex を使用

使用例

let colorIndex = notificationsColor.firstIndex{$0 == true}
//[false,true,false]
//1

配列の特定の文字列が含まれる要素数を取得

filter / count を使用

使用例

if array.filter({ $0 == "Key" }).count >= 2 {
  //もしarray内に "Key"の文字列を含む要素が2つ以上あれば処理
}

その要素が配列に含まれているかどうかを判定

containsを使用

使用例

if array.contains("Key") == false {
  //"Key"が配列内に含まれていれば処理
}

String型文字列の一部を取得

後ろ○文字を取得

使用例

latestDate = "2019.11.11" 
latestDate = String(latestDate.suffix(5)) 
//11.11

2019.12.1など桁数が変わっては困るので次を利用してみましょう

範囲指定で文字列取得(エラー)

 latestDate = latestDate[latestDate.index(latestDate.startIndex, offsetBy: 4)..<latestDate.index(latestDate.startIndex, offsetBy: 10)] 

参考サイト
http://www.office-matsunaga.biz/ios/description.php?id=24
https://qiita.com/HIRO-NET/items/b9720ccb3c86e85e5872

エラー発生

Subscript ‘subscript(_:)’ requires the types ‘String.Index’ and ‘Int’ be equivalent

特定に至らず別の方法を試しました。

特定範囲を削除(エラー)

 let fromIndex = latestDate.startIndex.advancedBy(0)
let toIndex = latestDate.startIndex.advancedBy(4)
  latestDate.removeSubrange(fromIndex...toIndex) 

Swift5ではremoveSubrangeに変わっています

参考サイト
https://swift.tecc0.com/?p=148
参考サイト(公式)
https://developer.apple.com/documentation/swift/array/2884498-removesubrange

エラー発生

Value of type ‘String.Index’ has no member ‘advancedBy’

バージョンアップによりこの記述が使えないようです。
別の方法を探ります

特定範囲を取得(エラー)

latestDate = latestDate[latestDate.startIndex...latestDate.index(latestDate.startIndex, offsetBy: 4)] 

エラー発生

Subscript ‘subscript(_:)’ requires the types ‘String.Index’ and ‘Int’ be equivalent

参考サイト
https://qiita.com/risuke/items/cdd6a75f236faae3ce6b

特定範囲を削除2(成功)

let start = latestDate.index(latestDate.startIndex, offsetBy: 0)
let end = latestDate.index(latestDate.startIndex, offsetBy: 4)
latestDate.removeSubrange(start...end) 

参考サイト
https://code-examples.net/ja/q/25d6d92

startIndexの代わりにendIndexも使用できます。

removeSubrange(削除)以外にも応用が効きますね。

Comment

メールアドレスが公開されることはありません。