써니쿠키의 IOS 개발일기
[swift] components 에서 enum의 rawValue를 이용해 문자열 댕강 쪼개버리기⚔️ 본문
사실 이건 저의 삽질 기록입니다 😂
어쩌다가 삽질하게 되었는가..?
[1+2-3/4*5] 를 (+, -, /, *) 를 기준으로 쪼개고 싶었습니다.
근데 그저... 저 symbol들이 다름 enum타입의 rawValue 로 이미 있기 때문에 그 rawValue로 사용하고 싶었습니다 🤔!
💡 components(separatedBy:)
에 enum 열거형 rawValue 사용하는 방법
✅ 우선 components(separatedBy:)
는 대괄호를 이용해서 쪼개기의 기준을 여러개로 설정해 줄 수 있다는 것을 알아야하고! 라잌디스
let a = "1#4%5^6"
print(a.components(separatedBy: ["#", "%", "^"]))
// ["1", "4", "6"]
✅ 그리고 enum타입에서 연산자 기호들을 rawValue로 가지고있고, allcases
사용하기 위해 caseIterable
프로토콜을 채택하고있습니다! 라잌디스
enum Operator: Character, CaseIterable {
case add = "+"
case subtract = "-"
case divide = "/"
case multiply = "*"
}
그럼 이제
String인 1+2-3/4*5
를 +
, -
, /
, *
를 기준으로 쪼개서[1, 2, 3, 4, 5]
의 Double배열로 댕강 댕강 쪼개보자
1️⃣ 첫번째 방법 :
let input = "1+2-3/4*5"
input.components(separatedBy: ["+", "-", "/", "*"])
처음엔 아주 직관적인 방법으로 기호 그대로 넣어줬습니다
❗️❓하지만 찝찝해요 왜냐면 이미 Opertor열거형에 기호를 rawValue로 갖고있기 때문에 사용해야 할 것 같거든요
2️⃣ 두번째 방법 (오류와 삽질의 시간):
대괄호에 넣어주길래 단순히 배열로 넣어주는 줄 알았습니다.
allcases와 map을 이용해 rawVlaue를 배열로 만들어서 넣어줬습니다.
["+", "-", "/", "*"]
생긴건 똑같거든요 !?
let operators = Operator.allCases.map{ $0.rawValue }
input.components(separatedBy: operators)
❌ 오류
character배열 말고 characterSet을 달라네요
공식문서에 components(separatedBy:)에서는 `[CharacterSet] 타입을 받는다고 하네요 🤔
아 그럼 Set인가?
set으로 받는다는 줄 알고 Set()으로 형변환을 해줘봤습니다.
let operators = Set(Operator.allCases.map{ $0.rawValue })
input.components(separatedBy: operators)
❌ 오류
CharacterSet은 Character를 갖는 Set과는 다른친구였구나 ?
그럼 이제 CharacterSet을 파봐야지이게 또 삽질의 ..묘미지..
3️⃣ 세번째 방법 :
✅ CharacterSet 타입으로 형변환 해주려면 CharacterSet(CharacterIn:)을 사용하면 되는구나 !
이때 CharatersIn으로는 String을 넣어줘야하므로 아까 map으로 꺼낸["+", "-", "/", "*"]
이 배열에 joind()
를 이용해 다시 문자열로 묶어줍니다!
let operators = CharacterSet(charactersIn: Operator.allCases.map{ String($0.rawValue) }.joined())
input.components(separatedBy: operators)
⭐️ 성공 ⭐️
'swift, Ios' 카테고리의 다른 글
클린아키텍쳐(Clean Architecture) (0) | 2023.03.02 |
---|---|
야곰아카데미 커리어 스타터 후기 (7기) (0) | 2023.02.26 |
[swift] LinkedList에서 head를 nil했을 시 다른 메모리들은 어떻게 될까?? (0) | 2022.09.22 |
[swift ]navigation controller 코드로 구현하기 (0) | 2022.09.16 |
[swift] singleton 쉬운 예제 구현해보기 (0) | 2022.09.12 |