Bir dize Swift bir diziye bölünür?


688

Diyelim ki burada bir ipim var:

var fullName: String = "First Last"

Dize tabanı beyaz boşluk bölmek ve değerleri kendi değişkenlerine atamak istiyorum

var fullNameArr = // something like: fullName.explode(" ") 

var firstName: String = fullNameArr[0]
var lastName: String? = fullnameArr[1]

Ayrıca, bazen kullanıcıların soyadı olmayabilir.


13
Merhaba, kontrol etmek için Mac'im yok. Ancak 'fullName.componentsSeparatedByString (string: "")' 'nu deneyebilirsiniz. Kopyalama ve yapıştırma, otomatik tamamlama işlevini kullanın, böylece doğru işlevi elde edersiniz.
David Gölzhäuser

Yalnızca bir karaktere bölüyorsanız, fullName.utf8.split( <utf-8 character code> )eserleri de kullanabilirsiniz ( UTF-16 .utf8ile değiştirin .utf16). Örneğin, bölme+fullName.utf8.split(43)
Jojodmo

Ayrıca, bazen soyadları "Daphne du Maurier" veya "Charles de Lint" de olduğu gibi boşluklara sahiptir
Berry

Yanıtlar:


784

Swift yolu küresel splitişlevi kullanmaktır, şöyle:

var fullName = "First Last"
var fullNameArr = split(fullName) {$0 == " "}
var firstName: String = fullNameArr[0]
var lastName: String? = fullNameArr.count > 1 ? fullNameArr[1] : nil

ile Swift 2

Swift 2'de, iç CharacterView türünün tanıtımı nedeniyle split kullanımı biraz daha karmaşık hale gelir. Bu, String'in artık SequenceType veya CollectionType protokollerini benimsemediği ve bunun yerine .charactersbir String örneğinin CharacterView türü temsiline erişmek için özelliği kullanmanız gerektiği anlamına gelir . (Not: CharacterView, SequenceType ve CollectionType protokollerini benimser).

let fullName = "First Last"
let fullNameArr = fullName.characters.split{$0 == " "}.map(String.init)
// or simply:
// let fullNameArr = fullName.characters.split{" "}.map(String.init)

fullNameArr[0] // First
fullNameArr[1] // Last 

98
Testlerimde, özellikle birçok parçaya bölünmesi gereken dizelerle uğraşırken, bileşenlerSeparatedByString genellikle çok daha hızlıdır. Ancak OP tarafından listelenen örnek için her ikisi de yeterli olmalıdır.
Casey Perkins

9
Xcode'dan itibaren 6.2b3 bölünmüş olarak kullanılabilir split("a:b::c:", {$0 == ":"}, maxSplit: Int.max, allowEmptySlices: false).
Pascal

14
componentsSeparatedByString()Ayırıcı tek bir karakterden daha uzunsa , eski yöntemi kullanmanız gerektiğini unutmayın . Ve söyleyebileceği kadar havalı let (firstName, lastName) = split(fullName) {$0 == ' '}, ne yazık ki işe yaramıyor.
NRitH

3
@Kashif o zaman kullanabilirsiniz split("a,b;c,d") {$0 == "," || $0 == ";"}veyasplit("a,b;c,d") {contains(",;", $0)}
Ethan

4
Xcode 7.0 için doğru kod, fullNameArr = fullName.characters.split {$ 0 == ""} .map (String.init) 'e izin verir. Düzenlemeye çalıştı, ancak reddedildi.
skagedal

1015

Sadece componentsSeparatedByStringyöntemi çağırınfullName

import Foundation

var fullName: String = "First Last"
let fullNameArr = fullName.componentsSeparatedByString(" ")

var firstName: String = fullNameArr[0]
var lastName: String = fullNameArr[1]

Swift 3+ için güncelleme

import Foundation

let fullName    = "First Last"
let fullNameArr = fullName.components(separatedBy: " ")

let name    = fullNameArr[0]
let surname = fullNameArr[1]

3
Bunun aslında bir temel olduğunu unutmayın NSString(Swift içe aktarırken bunları otomatik olarak değiştirir Foundation).
Can

1
Apple artık Swift'in Stringini otomatik olarak NSString'e dönüştürmediği Swift 1.2'de durum böyle değil.
elcuco

6
Bu yanıt Xcode 7 beta 4 ve Swift 2.0'da çalışır. Xcode artık Swift 1.2 ile Xcode 6.4'te olduğu gibi NSString'e tür dökümü yapmadan Swift String nesneleri üzerindeki temel yöntemlerini otomatik olarak tamamlıyor.
Andrew

1
Vakfı ithal edene kadar REPL'de işe yaramadı.
Velizar Hristov

1
Bu [String], Xcode 7.2'de tam olarak beklendiği gibi çalışır (yani fullNameArr an ).
Jon Cox

185

Bunu yapmanın en kolay yolu componentsSeparatedBy kullanmaktır:

Swift 2 için:

import Foundation
let fullName : String = "First Last";
let fullNameArr : [String] = fullName.componentsSeparatedByString(" ")

// And then to access the individual words:

var firstName : String = fullNameArr[0]
var lastName : String = fullNameArr[1]

Swift 3 için:

import Foundation

let fullName : String = "First Last"
let fullNameArr : [String] = fullName.components(separatedBy: " ")

// And then to access the individual words:

var firstName : String = fullNameArr[0]
var lastName : String = fullNameArr[1]

Bu herhangi bir yerde belgelenmiş mi Maury? Tek bir karakterden başka bir şeye bölmem gerekirse ne olur?
NRitH

10
@NRitH düşünün .componentsSeparatedByCharactersInSet(.whitespaceAndNewlineCharacterSet())
rmp251

@Chachalot iki işlevi vardır: componentsSeparatedByStringvecomponentsSeparatedByCharactersInSet
rmp251

132

Swift Dev. 4.0 (24 Mayıs 2017)

splitSwift 4'te ( Beta ) yeni bir işlev .

import Foundation
let sayHello = "Hello Swift 4 2017";
let result = sayHello.split(separator: " ")
print(result)

Çıktı:

["Hello", "Swift", "4", "2017"]

Değerlere erişme:

print(result[0]) // Hello
print(result[1]) // Swift
print(result[2]) // 4
print(result[3]) // 2017

Xcode 8.1 / Swift 3.0.1

Dizi ile çoklu sınırlayıcıların yolu.

import Foundation
let mathString: String = "12-37*2/5"
let numbers = mathString.components(separatedBy: ["-", "*", "/"])
print(numbers)

Çıktı:

["12", "37", "2", "5"]

8
Bunu import Foundationkullandığınız sınıfa eklediğinizden emin olun . #SavedYouFiveMinutes
Adrian

4
Dikkat (Swift 4): Gibi bir dizeniz varsa let a="a,,b,c"ve varsayılan olarak a.split(separator: ",")bir dizi alırsanız ["a", "b", c"]. Bu, omittingEmptySubsequences: falsevarsayılan olarak doğru olanı kullanılarak değiştirilebilir .
OderWat

2
Swift 4+'de çok karakterli bölünmeler var mı?
pkamb

57

Swift 4 veya üstü

Bir kişi adını doğru bir şekilde biçimlendirmeniz gerekiyorsa, PersonNameComponentsFormatter kullanabilirsiniz .

PersonNameComponentsFormatter sınıfı, PersonNameComponents nesnesi tarafından temsil edildiği gibi, bir kişi adının bileşenlerinin yerelleştirilmiş temsillerini sağlar. Kullanıcıya kişi adı bilgilerini görüntülerken yerelleştirilmiş adlar oluşturmak için bu sınıfı kullanın.


// iOS (9.0 and later), macOS (10.11 and later), tvOS (9.0 and later), watchOS (2.0 and later)
let nameFormatter = PersonNameComponentsFormatter()

let name =  "Mr. Steven Paul Jobs Jr."
// personNameComponents requires iOS (10.0 and later)
if let nameComps  = nameFormatter.personNameComponents(from: name) {
    nameComps.namePrefix   // Mr.
    nameComps.givenName    // Steven
    nameComps.middleName   // Paul
    nameComps.familyName   // Jobs
    nameComps.nameSuffix   // Jr.

    // It can also be configured to format your names
    // Default (same as medium), short, long or abbreviated

    nameFormatter.style = .default
    nameFormatter.string(from: nameComps)   // "Steven Jobs"

    nameFormatter.style = .short
    nameFormatter.string(from: nameComps)   // "Steven"

    nameFormatter.style = .long
    nameFormatter.string(from: nameComps)   // "Mr. Steven Paul Jobs jr."

    nameFormatter.style = .abbreviated
    nameFormatter.string(from: nameComps)   // SJ

    // It can also be use to return an attributed string using annotatedString method
    nameFormatter.style = .long
    nameFormatter.annotatedString(from: nameComps)   // "Mr. Steven Paul Jobs jr."
}

resim açıklamasını buraya girin

düzenleme / güncelleme:

Swift 5 veya üstü

Bir dizeyi harf olmayan karakterlere bölmek için yeni Character özelliğini kullanabiliriz isLetter:

let fullName = "First Last"

let components = fullName.split{ !$0.isLetter }
print(components)  // "["First", "Last"]\n"

1
@DarrellRoot sadece alt dizeleri eşlemeniz gerekirfullName.split { $0.isWhitespace }.map(String.init)
Leo Dabus

2
Bu yeni API'yı seviyorum, ancak Alt Dizeleri döndürdüğünü unutmayın. Ben Dizeleri gerekli (ve genel olarak boşluk bölmek istedim) bu yüzden bunu yaptım: let words = line.split{ $0.isWhitespace }.map{ String($0)} Sürümünüz için @LeoDabus teşekkürler (benim orijinal yorum kod eksik vardı). Ayrıca Swift 5 sürümünü cevabın en üstüne taşımanızı öneririm.
Darrell Root

53

WMios'un cevabına alternatif olarak, componentsSeparatedByCharactersInSet , daha fazla ayırıcıya (boşluk, virgül vb.) Sahip olmanız durumunda kullanışlı .

Özel girişinizle:

let separators = NSCharacterSet(charactersInString: " ")
var fullName: String = "First Last";
var words = fullName.componentsSeparatedByCharactersInSet(separators)

// words contains ["First", "Last"]

Birden çok ayırıcı kullanma:

let separators = NSCharacterSet(charactersInString: " ,")
var fullName: String = "Last, First Middle";
var words = fullName.componentsSeparatedByCharactersInSet(separators)

// words contains ["Last", "First", "Middle"]

2
Bence En yararlı cevap, ne zamandan beri birlikte dizeleri ayrılmasını sağlamak isteyebilirsiniz ,ya ;veya başka herhangi bir ayırıcı
Chris

49

Hızlı 4

let words = "these words will be elements in an array".components(separatedBy: " ")

34

Boşluk sorunu

Genellikle insanlar bu sorunu ve kötü çözümleri defalarca yeniden keşfederler. Bu bir alan mı? "" ve "\ n", "\ t" ya da daha önce hiç görmediğiniz bazı unicode boşluk karakterleri, küçük bir kısımda görünmez olduğu için. İle kaçabilirken

Zayıf bir çözüm

import Foundation
let pieces = "Mary had little lamb".componentsSeparatedByString(" ")

Eğer gerçeği kavramanız gerekiyorsa, dizelerde veya tarihlerde bir WWDC videosu izleyin. Kısacası, Apple'ın bu tür sıradan görevleri çözmesine izin vermek neredeyse her zaman daha iyidir.

Sağlam Çözüm: NSCharacterSet kullanın

Bunu doğru şekilde yapmanın yolu IMHO, NSCharacterSetdaha önce belirtildiği gibi boşluk alanınızın beklediğiniz gibi olmayabileceği ve Apple'ın boşluk alanı karakter seti sağlaması nedeniyle kullanmaktır. Sağlanan çeşitli karakter kümelerini keşfetmek için Apple'ın NSCharacterSet geliştirici belgelerine göz atın ve ancak o zaman ihtiyaçlarınıza uygun değilse yeni bir karakter seti artırın veya oluşturun.

NSCharacterSet boşluk alanları

Unicode General Category Zs ve CHARACTER TABULATION (U + 0009) içindeki karakterleri içeren bir karakter kümesi döndürür.

let longerString: String = "This is a test of the character set splitting system"
let components = longerString.components(separatedBy: .whitespaces)
print(components)

2
Kabul. "" İle bölünen cevapları gördükten sonra başıma gelen ilk şey şudur: Girdi metninde birkaç ardışık boşluk varsa ne olur? Sekmeleri varsa ne olur? Tam genişlikli (CJK) alan? vb.
Nicolas Miari

31

In Swift 4.2 ve Xcode 10

//This is your str
let str = "This is my String" //Here replace with your string

seçenek 1

let items = str.components(separatedBy: " ")//Here replase space with your value and the result is Array.
//Direct single line of code
//let items = "This is my String".components(separatedBy: " ")
let str1 = items[0]
let str2 = items[1]
let str3 = items[2]
let str4 = items[3]
//OutPut
print(items.count)
print(str1)
print(str2)
print(str3)
print(str4)
print(items.first!)
print(items.last!)

seçenek 2

let items = str.split(separator: " ")
let str1 = String(items.first!)
let str2 = String(items.last!)
//Output
print(items.count)
print(items)
print(str1)
print(str2)

Seçenek 3

let arr = str.split {$0 == " "}
print(arr)

Seçenek 4

let line = "BLANCHE:   I don't want realism. I want magic!"
print(line.split(separator: " "))
// Prints "["BLANCHE:", "I", "don\'t", "want", "realism.", "I", "want", "magic!"]"

Apple Documentation tarafından ....

let line = "BLANCHE:   I don't want realism. I want magic!"
print(line.split(separator: " "))
// Prints "["BLANCHE:", "I", "don\'t", "want", "realism.", "I", "want", "magic!"]"

print(line.split(separator: " ", maxSplits: 1))//This can split your string into 2 parts
// Prints "["BLANCHE:", "  I don\'t want realism. I want magic!"]"

print(line.split(separator: " ", maxSplits: 2))//This can split your string into 3 parts

print(line.split(separator: " ", omittingEmptySubsequences: false))//array contains empty strings where spaces were repeated.
// Prints "["BLANCHE:", "", "", "I", "don\'t", "want", "realism.", "I", "want", "magic!"]"

print(line.split(separator: " ", omittingEmptySubsequences: true))//array not contains empty strings where spaces were repeated.
print(line.split(separator: " ", maxSplits: 4, omittingEmptySubsequences: false))
print(line.split(separator: " ", maxSplits: 3, omittingEmptySubsequences: true))

23

Swift 4 karakterleri bölmeyi çok kolaylaştırır, sadece Dizeler için yeni bölme işlevini kullanın.

Misal: let s = "hi, hello" let a = s.split(separator: ",") print(a)

Şimdi 'merhaba' ve 'merhaba' ile bir dizi var.


Bunun bir String dizisi değil, kullanmak zor olan Substring dizisini döndürdüğünü unutmayın.
Lirik

19

Swift 5 için güncelleme ve en basit yol

let paragraph = "Bob hit a ball, the hit BALL flew far after it was hit. Hello! Hie, How r u?"

let words = paragraph.components(separatedBy: [",", " ", "!",".","?"])

Bu yazdırır,

["Bob", "isabet", "a", "top", "", "", "isabet", "KÜRESEL", "uçtu", "çok", "sonra", "o", " "," vur "," "," Merhaba "," "," Hie "," "," Nasıl "," r "," u "," "]

Ancak, boş dizeyi filtrelemek istiyorsanız,

let words = paragraph.components(separatedBy: [",", " ", "!",".","?"]).filter({!$0.isEmpty})

Çıktı,

["Bob", "isabet", "a", "top", "", "isabet", "KÜRESEL", "uçtu", "uçmak", "sonra", "it", "oldu", " hit "," Merhaba "," Hie "," Nasıl "," r "," u "]

Ama emin olun, Vakfı ithal


17

Hızlı 3

let line = "AAA    BBB\t CCC"
let fields = line.components(separatedBy: .whitespaces).filter {!$0.isEmpty}
  • Üç dizeleri döndürür AAA, BBBveCCC
  • Boş alanları filtreler
  • Birden çok boşluk ve tablo karakterini işler
  • Eğer yeni satırlar işlemek istiyorsanız, o zaman değiştirin .whitespacesile.whitespacesAndNewlines

15

Swift 4, Xcode 10 ve iOS 12 Güncellemesi% 100 çalışıyor

let fullName = "First Last"    
let fullNameArr = fullName.components(separatedBy: " ")
let firstName = fullNameArr[0] //First
let lastName = fullNameArr[1] //Last

Daha fazla bilgi için buradaki Apple belgelerine bakın .


13

Xcode 8.0 / Hızlı 3

let fullName = "First Last"
var fullNameArr = fullName.components(separatedBy: " ")

var firstname = fullNameArr[0] // First
var lastname = fullNameArr[1] // Last

Uzun yol:

var fullName: String = "First Last"
fullName += " " // this will help to see the last word

var newElement = "" //Empty String
var fullNameArr = [String]() //Empty Array

for Character in fullName.characters {
    if Character == " " {
        fullNameArr.append(newElement)
        newElement = ""
    } else {
        newElement += "\(Character)"
    }
}


var firsName = fullNameArr[0] // First
var lastName = fullNameArr[1] // Last

9

Bölmek istediğim dizede birden fazla kontrol karakteri mevcut olabilen bir senaryo vardı. Bunların bir dizisini korumak yerine, Apple'ın bu kısmı ele almasına izin verdim.

Aşağıdakiler iOS 10'da Swift 3.0.1 ile çalışır:

let myArray = myString.components(separatedBy: .controlCharacters)

8

İlginç bir dava buldum,

Yöntem 1

var data:[String] = split( featureData ) { $0 == "\u{003B}" }

Bazı komutları sunucudan yüklenen verilerden ayırmak için bu komutu kullandığımda , simülatörde test sırasında bölünebilir ve test cihazıyla senkronize edilebilir, ancak yayınlama uygulamasında ve Geçici olarak bölünmez

Bu hatayı izlemek çok zaman alıyor, Bazı Swift Sürümlerinden veya bazı iOS Sürümlerinden lanetlenmiş olabilir veya hiçbiri

StringByRemovingPercentEncoding'i denemeye çalıştığım için hala HTML kodu ile ilgili değil ve hala çalışmıyor

ek 10/10/2015

Swift 2.0'da bu yöntem olarak değiştirildi

var data:[String] = featureData.split {$0 == "\u{003B}"}

yöntem 2

var data:[String] = featureData.componentsSeparatedByString("\u{003B}")

Bu komutu kullandığımda , sunucudan yüklenen verileri aynı şekilde bölebilir


Sonuç olarak, gerçekten yöntem 2'yi kullanmanızı öneririm

string.componentsSeparatedByString("")

1
Bunun "cevap değil" statüsüne yakın olduğunu söyleyebilirim, çünkü çoğunlukla mevcut cevapları yorumluyor. Ama önemli bir şeye işaret ediyor.
rickster

8

Bu cevapların çoğu, girdinin beyaz boşluk değil boşluk olduğunu ve bu alanda tek bir boşluk olduğunu varsayar . Bu varsayımı güvenle yapabiliyorsanız, kabul edilen cevap (bennett'den) oldukça zariftir ve aynı zamanda yapabileceğim yöntemle gideceğim.

Bu varsayımı yapamadığımız zaman, burada cevapların çoğunun dikkate almadığı aşağıdaki suşları kapsaması için daha sağlam bir çözüm gerekir:

  • sekmeler / yeni satırlar / boşluklar (boşluk), yinelenen karakterler
  • lider / sondaki boşluk
  • Apple / Linux ( \n) ve Windows ( \r\n) yeni satır karakterleri

Bu durumlarda, bu çözüm tüm boşlukları (yinelenen ve Windows yeni satır karakterleri dahil) tek bir boşluğa dönüştürür, daha sonra tek bir boşlukla böler:

Hızlı 3:

let searchInput = "  First \r\n \n \t\t\tMiddle    Last "
let searchTerms = searchInput 
    .replacingOccurrences(
        of: "\\s+",
        with: " ",
        options: .regularExpression
    )
    .trimmingCharacters(in: .whitespaces)
    .components(separatedBy: " ")

// searchTerms == ["First", "Middle", "Last"]

6

Veya kapanış olmadan bunu sadece Swift 2'de yapabilirsiniz:

let fullName = "First Last"
let fullNameArr = fullName.characters.split(" ")
let firstName = String(fullNameArr[0])

6

Swift 4'te bir dizeyi bir diziye bölme adımları.

  1. dize ata
  2. @ bölmeye dayalı.

Not: variableName.components (separaBy: "split anahtar kelime")

let fullName: String = "First Last @ triggerd event of the session by session storage @ it can be divided by the event of the trigger."
let fullNameArr = fullName.components(separatedBy: "@")
print("split", fullNameArr)

4

Hızlı 4

let string = "loremipsum.dolorsant.amet:"

let result = string.components(separatedBy: ".")

print(result[0])
print(result[1])
print(result[2])
print("total: \(result.count)")

Çıktı

loremipsum
dolorsant
amet:
total: 3

3

Diyelim ki "Hello World" adında bir değişkeniniz var ve bunu bölüp iki farklı değişkente saklamak istiyorsanız şu şekilde kullanabilirsiniz:

var fullText = "Hello World"
let firstWord = fullText.text?.components(separatedBy: " ").first
let lastWord = fullText.text?.components(separatedBy: " ").last

3

Sadece splitdoğru cevap, burada 2'den fazla alan için fark var.

var temp = "Hello world     ni hao"
let arr  = temp.components(separatedBy: .whitespacesAndNewlines)
// ["Hello", "world", "", "", "", "", "ni", "hao"]
let arr2 = temp.components(separatedBy: " ")
// ["Hello", "world", "", "", "", "", "ni", "hao"]
let arr3 = temp.split(whereSeparator: {$0 == " "})
// ["Hello", "world", "ni", "hao"]

2
let str = "one two"
let strSplit = str.characters.split(" ").map(String.init) // returns ["one", "two"]

Xcode 7.2 (7C68)


2

Swift 2.2 Hata İşleme ve büyük harfli Düzeltme Eklendi:

func setFullName(fullName: String) {
    var fullNameComponents = fullName.componentsSeparatedByString(" ")

    self.fname = fullNameComponents.count > 0 ? fullNameComponents[0]: ""
    self.sname = fullNameComponents.count > 1 ? fullNameComponents[1]: ""

    self.fname = self.fname!.capitalizedString
    self.sname = self.sname!.capitalizedString
}

2

String kullanımı hala Swift'te bir zorluk ve diğer cevaplardan da görebileceğiniz gibi önemli ölçüde değişmeye devam ediyor. Umarım işler düzelir ve daha da basitleşir. Birden çok ayırıcı karakter içeren Swift'in mevcut 3.0 sürümü ile bunu yapmanın yolu budur.

Hızlı 3:

let chars = CharacterSet(charactersIn: ".,; -")
let split = phrase.components(separatedBy: chars)

// Or if the enums do what you want, these are preferred. 
let chars2 = CharacterSet.alphaNumerics // .whitespaces, .punctuation, .capitalizedLetters etc
let split2 = phrase.components(separatedBy: chars2)

2

Ben boş dizileri ortaya çıkan diziye dahil PHP gibi gevşek bölme arıyordu explode, bu benim için çalıştı:

"First ".split(separator: " ", maxSplits: 1, omittingEmptySubsequences: false)

Çıktı:

["First", ""]

2

Bu doğrudan bir dizi bölünmüş parça verir

var fullNameArr = fullName.components(separatedBy:" ")

o zaman böyle kullanabilirsiniz,

var firstName: String = fullNameArr[0]
var lastName: String? = fullnameArr[1]

1

Bu Beta 5'te tekrar değişti. Weee! Şimdi CollectionType'ta bir yöntem

Eski:

var fullName = "First Last"
var fullNameArr = split(fullName) {$0 == " "}

Yeni:

var fullName = "First Last"
var fullNameArr = fullName.split {$0 == " "}

Elma Sürüm Notları


1

Hızlı 2, XCode 7.1 için:

let complete_string:String = "Hello world"
let string_arr =  complete_string.characters.split {$0 == " "}.map(String.init)
let hello:String = string_arr[0]
let world:String = string_arr[1]

1

İşte yeni oluşturduğum bir algoritma, bir diziden Stringherhangi birine bölünecek Characterve alt dizeleri bölünmüş karakterlerle tutmak için herhangi bir istek varsa, swallowparametretrue .

Xcode 7.3 - Hızlı 2.2:

extension String {

    func splitBy(characters: [Character], swallow: Bool = false) -> [String] {

        var substring = ""
        var array = [String]()
        var index = 0

        for character in self.characters {

            if let lastCharacter = substring.characters.last {

                // swallow same characters
                if lastCharacter == character {

                    substring.append(character)

                } else {

                    var shouldSplit = false

                    // check if we need to split already
                    for splitCharacter in characters {
                        // slit if the last character is from split characters or the current one
                        if character == splitCharacter || lastCharacter == splitCharacter {

                            shouldSplit = true
                            break
                        }
                    }

                    if shouldSplit {

                        array.append(substring)
                        substring = String(character)

                    } else /* swallow characters that do not equal any of the split characters */ {

                        substring.append(character)
                    }
                }
            } else /* should be the first iteration */ {

                substring.append(character)
            }

            index += 1

            // add last substring to the array
            if index == self.characters.count {

                array.append(substring)
            }
        }

        return array.filter {

            if swallow {

                return true

            } else {

                for splitCharacter in characters {

                    if $0.characters.contains(splitCharacter) {

                        return false
                    }
                }
                return true
            }
        }
    }
}

Misal:

"test text".splitBy([" "]) // ["test", "text"]
"test++text--".splitBy(["+", "-"], swallow: true) // ["test", "++" "text", "--"]
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.