Clover
article thumbnail
[iOS/Swift] Safe Area 크기 가져오기 (iOS15~)
iOS(macOS)/Swift 2022. 9. 14. 23:13

🧐 iPhone Safe Area 크기 가져오기 Safe area의 배경색을 지정하고 싶다면, 메인 View의 BackgroundColor를 지정해주면 된다. 하지만 아래 화면처럼 상/하단이 동시에 적용이 되어버린다. 나는 아래쪽만 적용하고 싶어서, UIView를 코드로 각각 생성해서 addSubview()로 추가해주는 방식으로 해결을 했다. (더 좋은 방법이 있는지는 찾아보는 중...) 그런데 노치가 없는 디자인의 아이폰은 하단 Safe Area가 없으므로, 현재 화면상의 Safe Area의 크기를 받아와서 처리해줘야 할 필요가 있다. 그래서 아이폰의 상/하단 Safe Area의 크기를 가져와 활용할 수 있는 코드를 찾아보았다. if #available(iOS 13.0, *) { let window =..

article thumbnail
[iOS/Xcode 13] Rename - Outlet 변수 이름 수정 방법
iOS(macOS)/Swift 2022. 8. 15. 01:00

🧐 Xcode - Rename 기능 사용법 Storyboard 또는 Xib에서 Outlet으로 변수를 가져오고 난 뒤에 변수명을 변경하고 싶다면 Rename 기능을 사용하는 것이 좋다. 📎 사용법 나의 경우, 위처럼 [Lab'el']을 [Lab'le']로 잘못 쓰는 경우가 종종 있다. 이때, swift 파일의 코드만 고친다면 해당 UI가 열릴 때 "this class is not key value coding-compliant for the key" 에러가 발생한다. 대략 변수명을 바꾼 것이 다른 메뉴에는 적용이 되지 않았다는 의미로, 기존 변수명을 찾을 수 없어서 발생하는 것이다. 이는 Connections Inspector에서 먼저 확인해볼 수 있다. swift 파일에서 변수명을 아무리 바꿔주어도, ..

article thumbnail
[iOS/Xcode 13] 시뮬레이터 키보드 보이게 하는 법
iOS(macOS)/Swift 2022. 8. 15. 00:08

🧐 (Xcode 13) 시뮬레이터상 키보드(아이폰/패드 키보드)가 안 보일 때 Storyboard에서 화면 위에 Text field를 올려놓고, 시뮬레이터로 테스트를 해보는데 아이폰 키보드가 시뮬레이터 위로 올라오지 않았다. 이는 맥북과 연결되어 있는 Hardware 키보드를 인식하도록 설정이 되어 있어서 그런 것이므로, 아래의 방법으로 해결할 수 있다. [해결방법 1] 시뮬레이터에서 단축키 [⌘+K] 를 입력하면 바로 작동한다. [해결방법 2] 1. 시뮬레이터의 상단 메뉴 -> I/O 메뉴 클릭 2. Keyboard -> "Connect Hardware Keyboard" 항목 체크 해제. 해결방법 출처: https://stackoverflow.com/questions/24420873/xcode-6-ke..

[Swift/문법] 고차함수 (Higher-order function)
iOS(macOS)/Swift 2022. 8. 11. 14:37

간략한 스위프트 문법/사용법 정리 🧐 고차함수 (Higher-order function) 매개변수로 다른 함수를 받거나, 실행된 결과를 다시 함수로 반환하는 함수를 고차함수라고 한다. 스위프트 표준 라이브러리에서는 여러 유용한 고차함수를 제공한다. 📎 map 원소 전체를 순회하는 로직을 간결하게 처리할 수 있음. let names = ["kim", "lee", "min", "john"] // 기본형 let names1 = names.map { (name) in return name + "님" } // 축약형 let names2 = names.map { $0 + "님" } // 문자열의 길이 let names3 = names.map { $0.count } print(names1) print(names2) ..

[Swift/문법] 프로토콜 (Protocol)
iOS(macOS)/Swift 2022. 8. 10. 16:59

간략한 스위프트 문법/사용법 정리 🧐 프로토콜(Protocol) 프로토콜(Protocol)은 특정 기능 수행에 필수적인 요소를 정의해놓은 규격을 말한다. 반드시 구현해야 하는 요구사항을 정의해놓는 청사진이라고 할 수 있다. (Java의 추상 클래스나 interface와 비슷한 역할을 한다고 이해할 수 있을 것 같다.) 📎 생성 방법 protocol Talkable { // property var topic: String { get set } var language: String { get } // 상수(let)는 사용할 수 없다. // let sound: Int { get set } // Error // Method func talk() // Initializer init(topic: String, la..

[Swift/문법] 익스텐션(Extension)
iOS(macOS)/Swift 2022. 8. 10. 14:11

간략한 스위프트 문법/사용법 정리 🧐 익스텐션(Extension) 클래스, 구조체, 열거형, 프로토콜 타입에 기능을 추가(확장)할 수 있다. 클래스를 상속받지 않아도 되고, 원본 코드를 몰라도 기능을 확장시켜서 사용할 수 있도록 하는 문법이다. (새 기능을 추가할 수는 있지만, Override는 할 수 없음.) 📎 사용법 // 숫자(int) 짝수, 홀수 extension Int { var oddOrEven: String { if self % 2 == 0 { return "짝수" } else { return "홀수" } } } print(3.oddOrEven) // 출력: "홀수" print(4.oddOrEven) // 출력: "짝수" 기본 자료형(Int, Float, String 등)은 구조체(struc..

[Swift/문법] 클래스(Class), 구조체(Structure)
iOS(macOS)/Swift 2022. 8. 10. 00:39

간략한 스위프트 문법/사용법 정리 🧐 클래스(Class) 클래스는 참조 타입(Reference Types)이다. 따라서 원본의 값이 변경될 수 있음을 유의해야 한다. 그리고 클래스 내부에 선언된 프로퍼티(멤버 변수)는 반드시 초기화가 되어야만 한다. 따라서 클래스는 반드시 하나 이상의 생성자를 가져야 하고, 생성자를 통해 프로퍼티를 초기화 해주어야 한다. 만약 변수 선언과 동시에 초기화를 한다면 생성자에서 초기화를 하지 않아도 에러가 발생하지는 않고, 초기화를 하기 어려운 변수라면 옵셔널로 선언해야 한다. 📎 init(생성자) - Designated Initializer(지정 생성자) class UserInfo { var name: String var id: String // 지정 생성자 init(nam..

[Swift/문법] Enumerations (enum, 열거형)
iOS(macOS)/Swift 2022. 8. 9. 01:57

간략한 스위프트 문법/사용법 정리 🧐 enum(열거형) 기본 사용법 📎 기본 생성 enum Weekday { case mon case tue case wed, thu, fri, sat, sun } // 할당 let day: Weekday = Weekday.mon - 열거형 타입의 이름은 대문자로 시작하는 것을 권장한다. 📎 switch - case switch day { case .mon, .tue, .wed, .thu, .fri: // 타입 생략 가능 print("평일") case Weekday.sat: print("토요일") case .sun: print("일요일") } 📎 if - else if day == Weekday.fri { print("불금!") } else { print("불금이 아님 ㅜ..

[Swift/문법] Closure (클로저)
iOS(macOS)/Swift 2022. 8. 7. 14:50

간략한 스위프트 문법/사용법 정리 클로저(Closure)는 다른 언어의 람다(lambdas)와 비슷한 개념이다. 🧐 Closure 생성 방법 예시) 아래의 함수는 Int 타입의 매개변수를 받아서 "score: ~~"으로 반환해주는 함수이다. func getScore(a: Int) -> String { return "score: \(a)" } print(getScore(50)) // 출력: "score: 50" 위의 함수를 클로저로 구현하면 아래와 같다. let getScore = { (a: Int) -> String in return "score: \(a)" } print(getScore(100)) // 출력: "score: 100" 📎 축약형 - 클로저의 내부 코드가 한 줄 일때 return을 생략할 ..

[Swift/문법] 제어문(Control flow), Function
iOS(macOS)/Swift 2022. 8. 4. 17:39

간략한 스위프트 문법/사용법 정리 🧐 제어문(Control flow) Swift에서 제공하는 많은 제어문(Control flow) 중 while loop / for-in / if guard / switch 문의 사용법에 대해 정리해보았다. 📎 for-in let initial = "MCH" let names = ["Adrian", "Mike", "Tom"] for char in initial { print(char) } // M // C // H for name in names{ print(name) } // Adrian // Mike // Tom for index in 0...5 { print(index) } // 0 ~ 5 for index in 0... 0 { print(a) a -= 1 } // ..

article thumbnail
[Swift/문법] Collection(Array, Set, Dictionary)
iOS(macOS)/Swift 2022. 7. 28. 15:06

간략한 스위프트 문법/사용법 정리 🧐 Array(배열) 📎 배열 생성 방법 [빈 배열 생성하기] var products = Array() // 정식 문법 var ages = [Int]() // 축약형 (일반적으로는 축약형을 주로 사용한다고 한다.) [기본값 할당하며 생성하기] // 3칸짜리 Int 타입 배열 생성. var Dobules = Array(repeating: 0, count: 3) // [0, 0, 0] // 리터럴 활용 var shoppingList: [String] = ["Eggs", "Milk"] var items = ["pen", "card"] // 축약형 - 축약형으로 선언하면 타입 추론에 의해 배열의 타입이 결정된다. 📎 원소 추가, 제거, 접근 방법 [원소 추가] // 원소를 맨 ..