TIL

21일차 TIL

h_luz 2024. 3. 26. 21:05

 

Swift 알고리즘 및 언어공부

 

46. 숫자 문자열과 영단어

 

 

1 우선 "one","two","three"... 를 담은 배열

2 한 단어씩 합쳐서 변수에 저장하는데,

3 변수와 배열에 있는 숫자 문자열과 같으면 index 값 저장 ( num = firstIndex(of:변수값) )

4. num 값을 result 배열에 append 해주고, 리턴할 때 Int로 변환

 

import Foundation

func solution(_ s:String) -> Int {
    let numArr:[String] = ["zero","one","two","three","four","five","six","seven","eight","nine"]

    var joined:String = ""
    var result:[Int] = []

    for i in s {
        if let sNum = Int(String(i)) {
            result.append(sNum)
        } else {
            joined = joined + String(i)
            if let num = numArr.firstIndex(of: joined){
                result.append(num)
                joined = ""
            }
        }
    }
    return result.reduce(0, { $0 * 10 + $1 })
}

 

//다른 사람의 풀이

import Foundation

func solution(_ s:String) -> Int {
    let arr = ["zero","one","two","three","four","five","six","seven","eight","nine"]
    var str = s
    for i in 0..<arr.count {
        str = str.replacingOccurrences(of: arr[i], with: String(i))
    }
    return Int(str)!
}

뭔가 replacingOccurrences를 사용해서 간단하게 풀었는데 이게 뭔지 궁금해서 가져왔다 !

 

replacingOccurrences(of: , with: )

: 수신자에서 대상 문자열의 모든 항목이 지정된 다른 문자열로 대체된 새 문자열을 반환 (즉, 문자열 변환 후 새 문자열 반환)

of: 뒤에는 바뀔 문자열 with: 뒤에는 대체할 문자열을 넣고, 사용한다.

var before: String = "abcdefg"
before = before.replacingOccurrences(of: "ab", with: "xx")

print(before)	// xxcdefg

예시를 보니 더 잘 이해가 되는 것 같다.

이걸 사용해서 저 문제를 풀어낸 게 너무 대단... 👍🏻

 

오늘은 한 문제만 풀고, 타입 변형하는 방법들을 모아서 정리하려고 한다.

 

타입의 변환 정리

 

https://hanl0ight.tistory.com/8

 

Swift 타입 변환 모음

Int to String let integer = 10 let string = String(integer) // "10" String to Int let string = "10" let integer = Int(string) // 10 string 안에 내용이 정수가 아닐 경우 nil 값이 호출된다. StringArray to Int let myStringArray = ["12", "123"

hanl0ight.tistory.com

 


 

TodoList 버튼 기능 추가

 

UIAlertController

: 경고 메시지를 표시하는 개체

https://developer.apple.com/documentation/uikit/uialertcontroller

 

UIAlertController | Apple Developer Documentation

An object that displays an alert message.

developer.apple.com

 

추가하기 버튼을 눌렀을 때, Alert 창에 할 일 추가하는 입력 창이 뜨고,

입력을 완료 후, 추가 버튼을 누르면 titles 배열에 제목을 추가하도록 하는 기능

 

우선 전에 만들어줬던 버튼을 IBAction으로 연결해서 기능을 추가하도록 한다.

 

기본적인 alert 창 틀을 만들어준다. 추가를 클릭할 경우 나타나는 변화는 추후 수정 예정

 

텍스트 필드도 추가해 주고,

 

추가 버튼을 눌렀을 때 titles 배열에 text값이 append 되도록 설정했는데 잘 안 됐다

 


textfield 자음 모음 분리 현상

창 띄우는 건 잘 되었는데, 한글 입력이 이상했다. 자음모음 분리 증상이 일어나서 ㅜ

검색해 봤는데, 버전이 IOS 17이라서 생기는 문제라고 한다..

 

그래서 버전을 낮췄음 (참고 사이트)

내가 기존에 사용하고 있던 시뮬레이터는 아이폰 15였는데 아이폰 15는 iOS16을 사용할 수 없어서..

 

이 사이트를 보고 다운그레이드를 시도했다.

그런데 iOS16.4 버전을 다운은 받았는데,, iOS17로 설정되어 있는 내 프로젝트에 적용?을 어떻게 하는 건지 몰라서.. ㅠㅠ 조금 헤맸다.

결국 해결책을 찾았음!

좌측에 프로젝트 이름을 두 번 클릭하면 이렇게 창이 뜨는데 여기서 Minimum Deployments에 버전을 바꿔주면 다운그레이드된 버전에 시뮬레이터와 프로젝트를 사용할 수 있다 !! ㅠㅠ 

 

이렇게 iOS 16.4 버전으로 실행하면 textfield 자음 모음 분리 현상은 해결할 수 있음 !!

해결하고 보니 굉장히 간단..

 


 

그리고 시뮬레이터 아이폰 14로 하려고 autolayout을 설정해 주면서 또 이상현상 발생..!

분명히 잘 설정해 줬는데 왜 안 맞지..? 생각했는데 알고 보니

설정할 때 저 빨간 땡땡이 선들을 안 눌러주면 적용이 안됨..

저 선이 빨간 줄로 뜨고 Add Constraints 가 몇 개인지 잘 확인해야 함!

나는 0으로 설정할 거라서 그냥 위에 길이만 입력해서 안 되던 거였다....

나 자신.. 다음부터는 주의하길..

 


 

그리고 추가하기 버튼을 눌러도 추가가 안되길래... 🥹 여러 가지로 찾아봤더니 추가하고, reloadData를 안 해줘서 그랬다.

이렇게 append 후에 self.tableView.reloadData()를 해주면 정상적으로 추가가 된다.

정상적으로 추가된 것을 확인할 수 있다. 근데 크기가 너무 작아서 거의 안 보이니 조금 늘려줘야겠다

그냥 storyboard에서 label에 사이즈를 늘려줬다. 내가 정해놓은 길이보다 길게 적으면..으로 표시된다!

 


 

그럼 이제 Todo 완료하기 기능을 구현해 보자

스위치를 누르면 글씨에 취소선이 생기도록 구현!

 

문자열에 취소선을 긋기 위해서 어떤 기능을 알아야 할지 검색해 봤다!

취소선 긋기는 NSAttributedString을 사용한다고 한다.

 

NSAttributedString

: 텍스트 일부에 대한 관련 속성(예: 시각적 스타일, 하이퍼링크 또는 접근성 데이터)이 있는 문자열

취소선 외에도 색을 바꾸거나, 특정 문자열만 bold 처리하는 등, 다양한 작업 가능!

https://developer.apple.com/documentation/foundation/nsattributedstring

 

NSAttributedString | Apple Developer Documentation

A string with associated attributes (such as visual style, hyperlinks, or accessibility data) for portions of its text.

developer.apple.com

 

예시

testLabel이라는 UILabe이 있다는 가정하에 testLabel에 취소선을 긋는 코드이다.

if let text = testLabel.text {
  let attributeString = NSMutableAttributedString(string: testLabel.text)

  attributeString.addAttribute(.strikethroughStyle,
                                value: NSUnderlineStyle.single.rawValue,
                                range: NSMakeRange(0, attributeString.length))

  testLabel.attributedText = attributeString
}

 

tableViewCell은 다른 파일에 만들어줬기 때문에 그쪽에 switch를 IBAction으로 연결해서 설정해주어야 한다!

내일 다시 시도해 보자 파이팅 ~

(튜터님이 나에게 필요한 정보를 질문방에 올려주신 것 같은데 내일 보면서 다시 해봐야겠다!)

뭐ㅓ 하나 수정할 때마다 오류가 나서 큰일이다 . . . .

내일도 화이팅 !

'TIL' 카테고리의 다른 글

23일차 TIL  (1) 2024.03.28
22일차 TIL  (2) 2024.03.27
20일차 TIL  (3) 2024.03.25
19일차 TIL  (3) 2024.03.22
18일차 TIL  (2) 2024.03.21