Olive Study Room
[Swift] components(separatedBy:) & split 본문
백준 알고리즘 문제를 풀다가 입력을 받아 사칙연산을 한 결과를 반환하는 문제가 있었다.
readline() 메소드는 입력한 한 줄을 받아오게 되는데, 이 때 연산을 위해 숫자를 찢어줘야한다.
찢는 메소드는 여러가지가 있지만, 두 가지만 알아보자.
[ components(separatedBy:) ]
주어진 separator에 의해 분할된 리시버에서 substring들을 포함하는 문자열을 리턴한다.
* substring : 문자열 조각
Declaration
func components(separatedBy separator: CharacterSet) -> [String]
Parameters
separator(리시버를 나눌 때 사용할 character를 포함하는 문자 집합. nil이 아니여야한다)
Example
import Foundation
let line = readLine()
if let line = line {
var arr = line.components(separatedBy: " ")
print(Int(arr[0])!+Int(arr[1])!)
}
// 1 2
// 3(입력받은 1과 2를 나누어서 처리)
[ split(separator:maxSplits:omittingEmptySubsequences:) ]
주어진 element와 동일한 element
Declaration
func split(separator: Character, maxSplits: Int = Int.max, omittingEmptySubsequences: Bool = true) -> [Substring]
Parameters
separator
분할해야하는 요소
maxSplits
집합을 나누는 최대 횟수 또는 리턴할 시퀀스 수보다 한 개 더 적은 횟수.
maxSplits+1 시퀀스가 반환된다면 마지막 요소는 나머지 요소를 포함하는 오리지날 집합의 붙임이다.
maxSpilits는 zero와 같거나 크다.
디폴트값은 Int.max이다.
omittingEmptySubsequences
false면 빈 요소는 각각 연이은 separator 요소의 쌍이나 집합의 시작이나, 끝부분 separator 각각의 인스턴스를 결과로 반환한다.
디폴트는 true이다!
번역이 이상하지만 false일 때 separator를 기준으로 쪼개고 난 빈 요소("")도 결과로 반환해준다는 이야기.
* " "가 아닌 ""라는 것에 주의!
Example
let text = "Hello world! I'm peng dev"
print(text.split(separator: " "))
// ["Hello", "world!", "I\'m", "peng", "dev"]
print(text.split(separator: " ", maxSplits: 2))
// ["Hello", "world!", "I\'m peng dev"]
print(text.split(separator: " ", omittingEmptySubsequences: false))
// ["Hello", "", "", "", "world!", "I\'m", "peng", "dev"]
[ components(separatedBy:) 와 split의 차이점 두 가지! ]
1. component는 Foundation을 import 시켜줘야한다.
반면 split은 swift 표준 라이브러리에 들어있어 별로 import가 필요없다.
* Foundation Framework란?
필수 데이터 타입, collection, 운영체제 서비스에 접근하여 앱의 기본 기능 계층을 정의한다.
앱과 데이터 저장과 지속, 텍스트 프로세싱, 시간과 날짜 계산, sort와 filtering, 네트워킹을 포함하는 framework들의 기본 기능 계층을 제공한다. foundation에 의해 정의되는 클래스와 프로토콜, 데이터타입들은 macOS, iOS, watchOS, tvOS SDK에 사용된다.
2. 반환형이 다르다.
위에서도 볼 수 있지만, split은 [substring]을 리턴하고,
component는 [string] 리턴한다.
-> split을 바로 출력할 때 map(String.init)를 써서 string타입으로 바꿔주어야한다.
-> map에 관한 이야기는 추가 예정
'Coding > iOS' 카테고리의 다른 글
[Swift] Control Flow (0) | 2021.06.17 |
---|---|
[Swift] 고차함수(map, filter, reduce) (0) | 2021.06.07 |
[Swift] RawRepresentable (0) | 2021.05.01 |
[iOS] UISearchBar - 검색기능 구현하기 (1) 필수항목 (0) | 2021.04.30 |
[iOS] Photos Framework (1) 개념 (0) | 2021.04.13 |