読者です 読者をやめる 読者になる 読者になる

Pragmatic ball boy

iOSを中心にやってる万年球拾いの老害エンジニアメモ

Swift2でStringを指定した文字で分割

iOS Swift Swift2

beta5でsplitの仕様がちょっと変わり、以下のようにすることで文字列を分割できます。

let string1 = "hoge"
let string2 = string1.characters.split("o").map{ String($0) }  // [h, ge]

Swift2からStringはCollectionTypeではなくなり、Stringの保持するcharactorsがCollectionTypeになっています

Strings in Swift 2 - Swift Blog - Apple Developer

Swift1系

struct String {
    init()
}

extension String : CollectionType {

Swift2

extension String {
    /// A `String`'s collection of `Character`s ([extended grapheme
    /// clusters](http://www.unicode.org/glossary/#extended_grapheme_cluster))
    /// elements.
    public struct CharacterView {
        /// Create a view of the `Character`s in `text`.
        public init(_ text: String)
    }
    /// A collection of `Characters` representing the `String`'s
    /// [extended grapheme
    /// clusters](http://www.unicode.org/glossary/#extended_grapheme_cluster).
    public var characters: String.CharacterView { get }

...

extension String.CharacterView : CollectionType, Indexable, SequenceType {
    /// A character position.

splitはCollectionTypeのメソッドで仕様は以下のようになっています。

CollectionType Protocol Reference

charactors.split('separator') だけだと結果はCharacterViewのArrayとなってしまうので、map{ String($0) } でStringに変換しています。