HypeDitto / iOS-Study

iOS 기술 면접 대비
0 stars 0 forks source link

String은 왜 subscript로 접근이 안되는지 설명하시오. #53

Open HeegeePark opened 1 year ago

HeegeePark commented 1 year ago

Swift에서의 String은 문자들의 집합

-> Character는 1개 이상의 유니코드 스칼라가 조합

-> 조합되어 만들어진다는것 자체가 그럼 한개의 유니코드 스칼라로 만들어질 수도 있고 여러개의 유니코드 스칼라로 만들어질 수도 있다는것

-> 하나의 Character에 들어오는 유니코드 스칼라의 갯수가 다를 수 있다는것이고 그 말인즉슨 크기가 매번 일정치 않은 가변적일 수 있기 때문에 서브스크립트 접근이 불가능하다.

extension String {
  subscript(idx: Int) -> String? {
    guard(0..<count).contains(idx) else {
      return nil
    }
    let target = index(startIndex, offsetBy: idx)
    return String(self[target])
  }
}
YouHojoon commented 1 year ago

스위프트의 character는 하나 이상의 Unicode scaler로 이루어져있다. 즉 가변적인 길이이기 때문에 subscript로 접근할 수 없고 String.Index로 접근해야한다.