본문 바로가기

swift28

UIKit에서 SwiftUI의 Preview를 사용하는 방법 "TIL221031: How to use Preview in UIKit" 앱개발을 하는 중 UI작업을 할 때, 시각적으로 확인을 해야하는 경우가 생긴다. 물론 소규모의 앱이나 작업에서는 매번 빌드하는 것이 나쁘지않지만, 해당 페이지가 세부적인 항목이라 여러번 클릭하고 대기하고 심지어는 빌드시간이 오래걸린다면.. 우리는 많은 스트레스를 받게된다. 실제로 회사에서 빌드하는데 정말 많은 시간을 보내고, 그때마다 흐름이 끊기는 것을 경험한다. 이를 해결하기위해 여러 방면을 찾아보았다. 첫번째 방법은 SwiftUI의 Preview를 사용하는 방법이다. 하지만 단점은 SwiftUI를 사용해야 해당 기능을 킬수 있다는 것이었다. 아직 나의 작업환경이 구버전이기 때문에 대부분 UIKit 혹은 Objc라 엄두를 못내고 .. 2022. 10. 31.
(뷰의 이동) push와 present 안녕하세요 오늘은 앱을 개발하는 과정에서 기본적으로 요구하는 화면전환에 대해서 알아보겠습니다. 기본적으로 화면을 전환하는 방식은 Navigation을 이용해서 Stack처럼 쌓아가는 방식과 그냥 위에 띄우는 Present방식 이렇게 2가지가 있어요 Navigation은 push 으로 화면을 띄우고 Pop으로 제거한다. Present는 Present로 화면을 띄우고 Dismiss로 제거한다. !! Present방식은 뒤로가기가 따로 생기지 않기때문에 개발하면서 직접 만들어줘야한다. https://0urtrees.tistory.com/43 iOS 네비게이션컨트롤러 화면전환 기능 코드구현하기 안녕하세요 민군입니다! ^-^ 저는 최근 부스트코스 에이스 과정에 참여하게 되었는데요. 오늘은 부스트코스 에이스 학습내.. 2022. 1. 6.
접근제한자 private fileprivate internal public open 접근 제한자 헝용 범위 private : 같은 클래스 fileprivate : 같은 소스 파일(.swift) internal : 같은 모듈(framework) or 같은 프로젝트 public : 모듈 외부까지 가능 open : 모듈 외부, 상속 및 override가능(확장 가능) 선언하지 않을시 디폴트는 internal 접근 제한자 일반적으로 단일 대상으로 특정 앱을 만드는데, 이 앱의 접근은 앱의 모듈 외부에서 사용하게 만들 필요가 없다. 그렇기 때문에 기본값은 internal이다. 하지만, 외부에서 해당 모듈의 코드를 비공개 하고 싶은 경우 fileprivate이나 private 둘 중 하나로 설정해야한다. 클래스에 붙이는 접근 제한자의 의미는 살짝 다르다. open class -> 다른 모듈에서 해.. 2022. 1. 5.
와일드카드 식별자 와일드카드 패턴이란? - 값을 해체하거나 무시하는 패턴중 하나입니다. - 매개변수에서 많이 사용했던 와일드카드 식별( _ )을 사용한다는것은 이 자리에 올것이 무엇이든 상관하지 말라는 뜻입니다. - 와일드카드 식별자가 위치한 곳의 값은 무시해라라는 뜻 - 이 패턴은 for구문이나, switch구문에 많이 사용됩니다. switch구문에서의 사용 let string: String = "ABC" switch string { case _: print(string) } let optionalString: String? = "ABC" switch optionalString { case "ABC"?: print(optionalString) //optional("ABC")가 출력 case _?: //ABC빼고 나머지 .. 2021. 12. 20.
for 문에서의 제어전달문 보충 for num in 0...8 { if num % 2 == 0 { continue } print(num) } // 결과: 1, 3, 5, 7 for num in 0...8 { if num % 2 == 0 { break } print(num) } // 결과: 0, 1, 2 var sum = 0 for i in 0...10{ if i == 3 { break } print("\(i)") sum += 1 } print("sum: \(sum)") // sum: 3 2021. 12. 16.
옵셔널 바인딩 보충 // if let guard let 보충 var isTodayLunch: String? = "된장찌개" if let foodName = isTodayLunch{ print(foodName) } else { print("오늘 점심은 뭐 먹지?") } func isTodayLunch() { var foodName: String? foodName = "김치찌개" guard let name = foodName else { print("오늘 점심은 뭐 먹지?") return } print(name) } isTodayLunch() 2021. 12. 16.
조건문(IF, Switch) import UIKit 📌// if구문 : 단독으로 else 없이 사용가능 let first: Int = 5 let second: Int = 7 if first > second { print("first > second") } else if first < second { print("first < second") } else { print("first == second") } ///first < second 📌// switch 구문 // case가 비어있으면 실행 안 됨. // 비교될 값이 명확하게 한정적이지 않을때에는 default를 넣어줘야함. let integerValue: Int = 5 switch integerValue { case 0: print("Value == zero") case 1..... 2021. 12. 8.
Day09 generic 제네릭을 이용해 코드를 구현하면 어떤 타입에도 유연하게 대응할 수 있다. 제네릭으로 구현한 기능과 타입은 재사용하기도 쉽고, 코드의 중복을 줄일 수 있다. 제네릭을 사용하고자 할 때는 제네릭이 필요한 타입 또는 메서드의 이름 뒤의 홀화살괄호 기호 사이에 제네릭을 위한 타입 매개변수를 써주어 제네릭을 사용할 것임을 표시한다. 제네릭 타입 제네릭 타입을 구현하면 구조체, 클래스, 열거형 등이 어떤 타입과도 연관되어 동작할 수 있다. 제네릭 타입을 정해주면 그 타입에만 동작하도록 제한할 수 있어 안전하고 의도한 대로 기능을 사용하도록 유도할 수 있다. import UIKit // 제네릭 : 어떤 자료형이라든지 받을 수 있다. // : 제네릭 표기 //보통은 SomeElement가 아닌 "T"로 입력한다. st.. 2021. 12. 3.
Day07 property_observer Property Observers(프로퍼티 옵저버) Apple : Property Observers(프로퍼티 옵저버)를 정의해서 프로퍼티 값의 변경을 모니터링 할 수 있습니다. 프로퍼티 옵저버는 자신이 정의한 "저장 프로퍼티"에 추가 할 수 있으며, super class(부모클래스)를 상속한 프로퍼티에도 추가 할 수 있습니다. 프로퍼티 옵저버는 프로퍼티 값의 변화를 관찰하고, 이에 응답합니다. 프로퍼티 옵저버는 새로운 값이 프로퍼티의 현재값과 "동일하더라도" 속성의 값이 설정(set)될 때 마다 호출됩니다. ● willSet - 값이 저장되기 직전에 호출됩니다. ● didSet - 새로운 값이 저장된 직후에 호출됩니다. import UIKit var myAge = 0 { willSet{ print("값이.. 2021. 12. 2.
Day06 class_struct // 변수하나하나를 묶는 방법이 클래스와 스트럭트 두가지가 있다. struct YoutuberStruct { var name : String var subscribersCount: Int } // 메모리에 올리는데 name과 subscribersCount를 쓰라고 정함 var devGikko = YoutuberStruct(name: "기꼬", subscribersCount: 99999) var devGikkoClone = devGikko devGikkoClone.name = "호롤롤로" class YoutuberClass { var name : String var subscribersCount: Int // 처음에 메모리에 올리려면 위의 name과 subscribersCount에 대한 값이 없는 상태이기.. 2021. 11. 30.