Simply use this extension below.
extension String {
func componentSeparate(by: String) -> [String] {
var out: [String] = [String]()
var storeStr = ""
for str in Array(self) {
if by.contains(str) {
out.append(storeStr)
storeStr.removeAll()
continue
}
storeStr.append(str)
}
return out
}
func componentSeparated1(by: String) -> [String] {
var separateList: [String] = componentSeparate(by: by).map { "\($0)\(by)" }
separateList[separateList.count-1].removeLast(by.count)
return separateList
}
func componentSeparated2(by: String) -> [String] {
if self.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty { return [] }
var separateList: [String] = componentSeparate(by: by).map { "\($0)\(by)" }
separateList[separateList.count-1].removeLast(by.count)
return separateList
}
func componentSeparated3(by: String) -> [String] {
if self.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty { return [] }
var separateList: [String] = componentSeparate(by: by).map {"\($0)\(by)"}.filter {$0 != "-"}
separateList[separateList.count-1].removeLast(by.count)
return separateList
}
func componentSeparated4(by: String) -> [String] {
if self.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty { return [] }
let separateList: [String] = componentSeparate(by: by).map {"\($0)\(by)"}.filter {$0 != "-"}
return separateList
}
}
print("This-is-a-sentence-".componentSeparated1(by: "-"))
print("".componentSeparated2(by: "-"))
print("This-is-a-sentence-".componentSeparated3(by: "-"))
print("This-is-a-sentence-".componentSeparated4(by: "-"))
Output:
["This-", "is-", "a-", "sentence-", ""]
[]
["This-", "is-", "a-", "sentence"]
["This-", "is-", "a-", "sentence-"]