본문 바로가기

Swift

(26)
[Swift] 함수를 사용한 프로퍼티 기본값 설정 함수를 사용한 프로퍼티 기본 값 설정 만약 사용자 정의 연산을 통해 저장 프로퍼티 기본값을 설정하고자 한다면 클로저나 함수를 사용하여 프로퍼티 기본 값을 제공할 수 있다. 인스턴스를 초기화할 때 함수나 클로저가 호출되면서 연산 결괏값을 프로퍼티 기본값으로 제공해준다. ( -> 타입이 일치해야함 ) 클로저가 실행되는 시점 - 초기화할 때, 인스턴스의 다른 프로퍼티 값이 설정되기 전! 즉, 클로저 내부에서는 인스턴스의 다른 프로퍼티를 사용하여 연산할 수 없다는 것이다. (self 프로퍼티, 인스턴스 메서드 등) 클로저를 통한 student 프로퍼티 기본 값 설정 struct Student{ var name: String? var number: Int? } class SchoolClass{ var studen..
[Swift] self 프로퍼티 (feat. mutating, 타입메서드) 💡self 프로퍼티? 인스턴스를 더 명확하게 지칭하고 싶을 때 사용 스위프트는 자동으로 메서드 내부에 선언된 지역변수 -> 메서드 매개변수 -> 인스턴스 프로퍼티를 찾아 지정하는 것을 유추한다. 이때, self 프로퍼티를 사용하여 메서드에서 매개변수가 아닌 인스턴스 프로퍼티를 지칭할 수 있다. ➰self 프로퍼티의 다른 용도 값 타입 인스턴스 자체의 값을 치환할 수 있다. 클래스의 인스턴스는 참조 타입이라서 self 프로퍼티에 다른 참조를 할당할 수 없는데, 구조체나 열거형 등은 self 프로퍼티를 사용하여 자신 자체를 치환할 수 있다. ➰self 프로퍼티와 mutating 키워드 mutating 키워드 ? - 자신의 프로퍼티 값을 수정할 때 클래스의 인스턴스 메서드는 크게 신경쓸 필요가 없지만, 구조체..
[Swift] 연산 프로퍼티로 가독성 높이기! 💡연산 프로퍼티? 실제값을 저장하는 프로퍼티가 아니라, 특정 상태에 따른 값을 연산하는 프로퍼티 메서드로 접근자와 설정자를 구현하던것을 연산 프로퍼티를 사용하면 코드의 가독성을 높일 수 있다! 다만, get 메서드만 구현해둔 것처럼 읽기 전용 상태로는 구현하기 쉽지만, 쓰기 전용 상태로는 구현할 수 없다는 단점이 있다. 연산 프로퍼티 정의와 사용 struct CoordinatePoint{ var x: Int // 저장 프로퍼티 var y: Int // 저장 프로퍼티 var oppositePoint: CoordinatePoint{ // 연산 프로퍼티 // 접근자 get { return CoordinatePoint(x: -x, y: -y) } // 설정자 set(opposite){ x = -opposite...
[Swift] 구조체와 클래스 구조체의 인스턴스는 값 타입 (전달될 값이 복사되어 전달) 클래스의 인스턴스는 참조 타입 (값을 복사하지 않고 참조(주소)가 전달) 1️⃣ 구조체 // 구조체 정의 struct BasicInformation { var name: String var age: Int } // 구조체 인스턴스의 생성 및 초기화 // 프로퍼티 이름(name, age)으로 자동 생성된 이니셜라이즈를 사용하여 구조체를 생성 var yejinInfo: BasicInformation = BasicInformation(name: "yejin", age: 23) yejinInfo.name = "hyejin" // 변경 가능 yejinInfo.age = 25 // 변경 가능 // 프로퍼티가 상수 let 의 타입일 경우 변경 불가 ➰스위프트..
[Swift] 옵셔널 : 옵셔널 추출 💡 옵셔널 단어 뜻 그래도 '선택적인', 즉 값이 '있을 수도, 없을 수도 있음'을 나타내는 표현 '변수나 상수 등에 꼭 값이 있다는 것을 보장할 수 없다.' 즉, 변수 또는 상수의 값이 nil일 수도 있다는 것을 의미 옵셔널 변수의 선언 및 nil 할당 var myName: String? = "yejin" print(myName) // yejin //옵셔널 타입의 값을 print 함수를 통해 출력하면 //Optional("yejin")이라고 출력되는 것이 정상 //다만, 차후의 주석표현의 편의를 위해서 //Optional()은 생략하고 값만 표기하도록 하겠다. //또, 옵셔널 타입의 값을 print 함수의 매개변수로 전달하면 //컴파일러 경고가 발생할 수 있다. //정상이므로 놀라지 않아도 된다. my..