여기에 문자열이 있다고 가정 해보십시오.
var fullName: String = "First Last"
문자열 기반을 공백으로 나누고 값을 해당 변수에 할당하고 싶습니다.
var fullNameArr = // something like: fullName.explode(" ")
var firstName: String = fullNameArr[0]
var lastName: String? = fullnameArr[1]
또한 때때로 사용자는 성이 없을 수도 있습니다.
답변
스위프트 방식은 split
다음과 같이 전역 함수 를 사용하는 것입니다.
var fullName = "First Last"
var fullNameArr = split(fullName) {$0 == " "}
var firstName: String = fullNameArr[0]
var lastName: String? = fullNameArr.count > 1 ? fullNameArr[1] : nil
와 스위프트 2
Swift 2에서는 split의 사용이 내부 CharacterView 유형의 도입으로 인해 조금 더 복잡해졌습니다. 즉, String은 더 이상 SequenceType 또는 CollectionType 프로토콜을 채택하지 않으며 대신 .characters
속성을 사용하여 String 인스턴스의 CharacterView 유형 표현에 액세스 해야 합니다. (참고 : CharacterView는 SequenceType 및 CollectionType 프로토콜을 채택합니다).
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
답변
componentsSeparatedByString
당신의 방법을 호출fullName
import Foundation
var fullName: String = "First Last"
let fullNameArr = fullName.componentsSeparatedByString(" ")
var firstName: String = fullNameArr[0]
var lastName: String = fullNameArr[1]
Swift 3 이상 업데이트
import Foundation
let fullName = "First Last"
let fullNameArr = fullName.components(separatedBy: " ")
let name = fullNameArr[0]
let surname = fullNameArr[1]
답변
가장 쉬운 방법은 componentsSeparatedBy를 사용하는 것입니다.
스위프트 2의 경우 :
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]
스위프트 3의 경우 :
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]
답변
스위프트 개발 4.0 (2017 년 5 월 24 일)
새로운 기능 split
Swift 4 ( 베타 ).
import Foundation
let sayHello = "Hello Swift 4 2017";
let result = sayHello.split(separator: " ")
print(result)
산출:
["Hello", "Swift", "4", "2017"]
액세스 값 :
print(result[0]) // Hello
print(result[1]) // Swift
print(result[2]) // 4
print(result[3]) // 2017
Xcode 8.1 / 스위프트 3.0.1
배열이있는 여러 구분 기호가 있습니다.
import Foundation
let mathString: String = "12-37*2/5"
let numbers = mathString.components(separatedBy: ["-", "*", "/"])
print(numbers)
산출:
["12", "37", "2", "5"]
답변
스위프트 4 이상
개인 이름을 올바르게 형식화해야하는 경우 PersonNameComponentsFormatter 를 사용할 수 있습니다 .
PersonNameComponentsFormatter 클래스는 PersonNameComponents 객체로 표시되는 사람 이름 구성 요소의 지역화 된 표현을 제공합니다. 이 클래스를 사용하여 사용자 이름 정보를 사용자에게 표시 할 때 현지화 된 이름을 작성하십시오.
// 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."
}
편집 / 업데이트 :
스위프트 5 이상
문자가 아닌 문자로 문자열을 나누기 위해 new Character 속성을 사용할 수 있습니다 isLetter
.
let fullName = "First Last"
let components = fullName.split{ !$0.isLetter }
print(components) // "["First", "Last"]\n"
답변
WMios의 답변에 대한 대안으로을 사용할 수도 있습니다 componentsSeparatedByCharactersInSet
.이 경우 더 많은 구분 기호 (공백 공간, 쉼표 등)가있는 경우 편리합니다.
특정 입력으로 :
let separators = NSCharacterSet(charactersInString: " ")
var fullName: String = "First Last";
var words = fullName.componentsSeparatedByCharactersInSet(separators)
// words contains ["First", "Last"]
여러 구분 기호 사용 :
let separators = NSCharacterSet(charactersInString: " ,")
var fullName: String = "Last, First Middle";
var words = fullName.componentsSeparatedByCharactersInSet(separators)
// words contains ["Last", "First", "Middle"]
답변
스위프트 4
let words = "these words will be elements in an array".components(separatedBy: " ")