본문 바로가기
Swift/기초

27. 스위프트 기초 문법[로또(6) - 정렬과 회전]

by UDDT 2025. 2. 2.

Swift/기초 카테고리에 업로드한 모든 내용은 KxCoding 기초 강의를 토대로 작성하였습니다.

 

 

 Swift Standard Library

  ex) sort, sorted, append, appending ∙∙∙

  1. ed, ing : 원래 값을 그대로 두고, 작업의 결과를 새로운 값으로 리턴

  2. 동사 원형 : 원래 값에서 바로 작업(리턴이 없을 수 있음)

  * 예외도 있음. (filter 같은 함수) 

var str = "Hello"
str.append("Swift")
print(str)
HelloSwift

str.appending("!!!")                // 이 단계에서는 HellowSwift!!! 이지만,
print(str)
HelloSwift                               // 리턴 값이 없어서 HelloSwift로 리턴됨

 

sorted와 sort의 차이

  1. sorted() : 배열에 있는 값을 정렬해서 리턴

 

  2. sort : 현재의 배열을 직접 정렬(리턴 없음)

 

 

랜덤 숫자 저장하기

  1. 기존의 코드는 배열을 만들고, 배열에 숫자를 저장하는 방식

 

  2. 코드 변경

// let sortedNums = nums.sorted() 를
let sortedNums = nums.sort

// 오류 발생 : nums.sort는 리턴 값이 없으므로 상수에 저장할 수 없음.

 

  3. 상수를 선언하는 코드 삭제

 

  4. sortedNums[index]를 nums[index]로 변경                            * 나름의 메모리 절약

 

 UI 오류 해결하기

label.layer.cornerRadius = label.bounds.width / 2

 

 

  1. 시뮬레이터를 세로로 실행하면 가로에서 UI 오류 발생.   * Stack View를 설정할 때 label의 너비를 균등분할(Fill Equally) 설정

* 가로 방향일 때 넓어진 너비만큼 다시 균등분할하는데, corner radius가 세로 방향에서의 계산 그대로기 때문에 모양이 틀어짐

 

  2. 시뮬레이터를 가로로 실행하면 세로에서 UI 오류 발생.  

* cornerRadius가 너비의 절반보다 훨씬 크기 때문에 마름모로 표현됨.

 

  3. 코드 수정                                       * 화면을 회전시킬 때마다, cornerRadius를 다시 계산하기

override func viewWillTransition(to size: CGSize, with coordinator: any UIViewControllerTransitionCoordinator
){
	code
}

 

  4. 코드 추가

super.viewWillTransition(to: size, with: coordinator)

 

  5. 코드 추가

 

  6. Return키 누르기

 

  7. 코드 추가

1번 레이블에 적용 완료

  8. 전체 적용

 

  9. 코드 개선

 

  10. .enumerated() 삭제

 

  11. labels를 찾을 수 없는 오류 발생

 

  12. 위치를 조정해도 오류 발생

  (아울렛은 1:1로 연결되기 때문에, 여러 아울렛에 동일하게 적용하기 위해서 배열에 담았던 것)

 

  13. 원래대로 되돌리고, 다시 아울렛 연결(Outlet Collection)

 

  14. 나머지 label 연결

 

  15. 코드 변경

 

  16. 불필요한 코드 정리

 

 클로저 안에서 외부의 값을 호출할 때는 self를 반드시 써야한다

최근댓글

최근글

skin by © 2024 ttuttak