


import Foundation
func solution(_ code:String) -> String {
var codeArr = code.map {String($0)}
var mode = 0
var answer: String = ""
for i in 0 ... code.count-1 {
if mode == 0 {
if codeArr[i] == "1" {
mode = 1
}else{
(i % 2 == 0) ? (answer += codeArr[i]) : (answer += "")
}
}else{
if codeArr[i] == "1" {
mode = 0
}else{
(i % 2 == 1) ? (answer += codeArr[i]) : (answer += "")
}
}
}
return answer == "" ? "EMPTY" : answer
}

func solution(_ code: String) -> String {
let result = code.enumerated().reduce(into: ("", 0)) { acc, val in
let (i, c) = val
if c == "1" {
acc.1 = 1 - acc.1
} else if (acc.1 == i % 2) {
acc.0 += String(c)
}
}
return result.0.isEmpty ? "EMPTY" : result.0
}
- Swift의 문자열은 다른 언어 처럼 배열의 요소에 접근하듯이 'str[i]' 방식의 문법을 사용하면 에러가 발생한다.
- str[str.index(str.startIndex, offsetBy: 원하는 인덱스] 방식으로 접근해야 한다.
- 하지만 복잡하므로 'String'을 'String Array'나 'Array'로 변환하여 다른 언어처럼 편하게 str[i] 접근하자.
A. Swift의 String의 index 펑션으로 문자열 요소에 접근한 경우
let str = "ABCDE"
str[str.index(str.startIndex, offsetBy: 2] // C
B. String을 String Array로 변환하여 문자열 요소에 쉽게 접근한 경우
let str = "ABCDE"
let strArray = str.map{String($0)}
strArray[2] // C
C. Array로 Type 변환하여 문자열 요소에 쉽게 접근한 경우
let str = "ABCDE"
let strArray = Array(str)
strArray[2] // C
결론!!
Swift에서 문자열의 요소에 접근할 때는 Array() 형변환 방법인 C가 제일 편한 것 같다.
단, Array() 형변환시 배열의 요소 하나하나는 String형이 아닌 Character형이므로 필요시 String() 형변환이 필요하다!