[arrays] Swift에서 문자열을 배열로 나누시겠습니까?

여기에 문자열이 있다고 가정 해보십시오.

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 일)

새로운 기능 splitSwift 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: " ")