본문 바로가기

모바일앱/Swift76

Swift - 참조(Strong, weak, unowned) 아주 간단한 예로 설명하자면.. 엄마와 나를 예로 들어보자.Strong엄마와 아이가 손을 꼭 잡고 있다고 가정해보자.엄마가 어디로 가든지 아이도 따라가야한다.엄마가 아이 손을 잡고 있으면, 아이는 어디에도 가지 않고 엄마와 함께 있는 것이다.Weak엉마와 아이가 손을 잡고 있다고 가정해보자.아이가 다른 곳에 가고 싶어하면 손을 놔줄 수 있다고 한다.아이가 어딘가 가고 싶다고 결정하면, 아이는 자유롭게 이동할 수 있고, 엄마와 아이가 잡은 손은 자연스럽게 분리된다.아이가 손을 놓고 이동하면, 엄마와 아이는 연결되어있지 않게 된다.Unowned엄마와 아이는 항상 같이 다닌다.엄마 없이는 절대 집을 나서지 않는다.만약 엄마가 여행을 가서 집을 비우면, 아이도 함께 가야한다.엄마가 없으면, 아이도 어디에도 갈 .. 2024. 6. 8.
swift signum() 메서드 이용하기 빠르게 양수와 음수 여부를 체크하는 경우,x > 0 처럼 체크하는 경우도 있지만x.signum() 으로 체크하는 방법 도 있다.signum() 메서드는 주어진 숫자의 부호를 나타내는 메서드다. 이 메서드는 수학적으로 숫자의 부호를 판별하여 그 결과를 반환한다.대부분의 프로그래밍 언어에서 사용할 수 있으며, 특히 수치 연산이 중요한 경우 유용하게 사용할 수 있다.signum() 메서드의 작동 방식:숫자가 양수일 경우, 1을 반환.숫자가 음수일 경우, -1을 반환.숫자가 0일 경우, 0을 반환.이 메서드는 숫자의 절대값을 확인하지 않고 오직 부호만을 고려하기 때문에, 부호에 따라 분기 처리를 해야 할 때 특히 유용하게 사용된다. 2024. 5. 30.
swift Array - 빠르게 빈 배열 만들기 Array - swift fast init Empty Array 반드시 배열의 타입을 명시해야 한다. 빈 배열은 세 가지 형태로 만들 수 있다. //let emptyArray = [] // error: 타입 명시가 돼 있지 않음. (형식 추론 X) let emptyArray: [Int] = []// 정식 문법 사용 let emptyArray2 = Array()// 단축 문법 사용 let emptyArray3 = [Int]() 2023. 1. 5.
클로저 톺아보기 Closure 톺아보기 클로저는 Named Closure와 Unnamed Closure로 나뉜다. 우리가 흔하게 사용하는 함수는 Named Closure다. 둘다 클로저에 포함되지만 우리가 통상적으로 부르는 클로저는 Unnamed Closure를 말한다. // 1. Named Closure func doSomthing() { print("do something!!!") } // 2. UnnamedClosure let doSomething = { print("do something!!!") } 결국 클로저와 함수는 그게 그것이기 때문에 1급객체의 성질을 가지고 있다. 즉 클로저도 아래의 성질을 갖고있다. 변수나 상수에 대입할 수 있다. 함수의 인자값으로 클로저를 전달할 수 있다. 함수의 반환값으로 클로저를.. 2022. 11. 27.
1급 객체 1급 객체 Swift는 객체지향, 함수형, 프로토콜 프로그래밍을 사용한다. 1급객체의 3가지 특징 변수나 상수에 대입할 수 있다. 함수의 반환값으로 자신을 사용할 수 있다. 함수의 인자값으로 자신을 사용할 수 있다. 이걸 함수에 대입하면 아래와 같다 1급객체함수의 3가지 특징 변수나 상수에 대입할 수 있다. 함수의 반환값으로 함수를 사용할 수 있다. 함수의 인자값으로 함수를 사용할 수 있다. 1. 변수나 상수에 대입할 수 있다. func checkContainStore(storeName: String) -> Bool { let storeArray = ["CU", "GS25", "ministop", "sevenEleven"] return storeArray.contains(storeName) ? true .. 2022. 11. 27.
프로퍼티 옵저버(willSet / didSet) - 프로퍼티(2.5) [참고: 애플문서] [참고: Zedd’s Blog] 프로퍼티 시리즈 저장프로퍼티(feat.클래스와 구조체) - 프로퍼티(1) 연산프로퍼티(Getter/Setter) - 프로퍼티(2) 🍊 프로퍼티 옵저버(willSet / didSet) - 프로퍼티(2.5) 타입프로퍼티(static) - 프로퍼티(3) 프로퍼티 옵저버(Property Observers) 이전글에서 소개한 저장프로퍼티와 연산프로퍼티를 감시할 수 있다. Apple 프로퍼티 옵저버는 자신이 정의한 "저장 프로퍼티"에 추가 할 수 있으며, super class(부모클래스)를 상속한 프로퍼티에도 추가 할 수 있습니다. 프로퍼티 옵저버는 새로운 값이 프로퍼티의 현재값과 "동일하더라도" 속성의 값이 설정(set)될 때 마다 호출됩니다. lazy 저장 프.. 2022. 11. 25.
연산프로퍼티 - 프로퍼티(2) 연산프로퍼티 - 프로퍼티(2) [참고: 애플문서] [참고: Zedd’s Blog] 프로퍼티 시리즈 저장프로퍼티(feat.클래스와 구조체) - 프로퍼티(1) 🍊 연산프로퍼티(Getter/Setter) - 프로퍼티(2) 프로퍼티 옵저버(willSet / didSet) - 프로퍼티(2.5) 타입프로퍼티(static) - 프로퍼티(3) Property는 저장프로퍼티와 연산프로퍼티, 타입프로퍼티 가 있다. 이제 설명할 내용은 그중 연산프로퍼티다. 저장프로퍼티는 상수와 변수값을 인스턴스의 일부에 저장한다. 클래스와 구조체에서만 사용된다. 반면 연산프로퍼티는 값을 저장하기보다는 특정연산을 수행하여 값을 반환한다. 클래스와 구조체, 열거형에서 사용된다. 클래스, 구조체, 열거형 (Class, Struct, Enum)에.. 2022. 11. 22.
저장프로퍼티 - 프로퍼티(1) [참고: 애플문서] [참고: Zedd’s Blog] 프로퍼티 시리즈 🍊 저장프로퍼티(feat.클래스와 구조체) - 프로퍼티(1) 연산프로퍼티(Getter/Setter) - 프로퍼티(2) 프로퍼티 옵저버(willSet / didSet) - 프로퍼티(2.5) 타입프로퍼티(static) - 프로퍼티(3) Property는 저장프로퍼티와 연산프로퍼티, 타입프로퍼티 가 있다. 클래스나 구조체는 이 저장프로퍼티, 연산프로퍼티로 이루어지는 것이다. 연산프로퍼티는 열거형에서도 사용된다. 이제 설명할 내용은 그중 저장프로퍼티다. Stored Property 저장프로퍼티는 클래스와 구조체에서만 사용된다. 저장프로퍼티를 선언할 때는 저장할 기본값을 줄 수 있고, 이후 수정할 수 있다. 이때 사용되는 것이 변수와 상수이다. .. 2022. 11. 21.
mutating 과 구조체 참고: https://velog.io/@wook4506/iOS-Swift-Swift-문법을-알아보자-18편-mutating Class && Struct && Enum 미완 enum추가 기존 글에서 클래스는 참조타입이고 구조체와 열거형은 값 타입이라고 정리를 했다. 그래서 값타입인 구조체에서는 인스턴스 메소드 내에서 프로퍼티들을 수정할 수 없게 되어있다. 때문에 이 프로퍼티들을 구조체 안에 있는 메소드에서 수정을 하려면 mutating이라는 키워드를 사용해야한다. mutating 특정 메소드 내에서 구조체 또는 열거형의 프로퍼티를 수정해야하는 경우, 해당 메소드의 동작을 변경하도록 하는 것 예시를 보면 Person이라는 구조체에서 init을 통해 초기화를 해주어서 완벽한 코드처럼 보이지만 에러가 발생한다... 2022. 4. 13.
[ios] shortening unwrapping 쇼트닝 언래핑 swift5.7 Swift 5.7에서 반영될 Unwrapping과정 번역: https://betterprogramming.pub/swift-5-7-unwrapping-optionals-gets-improvement-be81c578e9fa 현재 Xcode 13.3에서 지원안함 Shadowing이란 옵셔널 x를 풀었을 때 동일한 값을 포함하는 x라는 이름의 새 상수를 만들었고 이제 옵셔널 변수 대신 이 상수를 사용합니다. var x: Int? if let x = x { // do something with the new x } 이러한 작업을 shadowing 이라고 합니다. 📌섀도잉은 좋은걸까? 셰도잉에는 몇가지 단점이 있습니다. 현실적인 상황에서는 변수가 훨씬 긴경우가 많다. var lastTimeUserEnteredTh.. 2022. 4. 12.