반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- swipe
- remote config
- UIScrollView
- Android
- Apple
- Observable
- github
- Alamofire
- string
- Firebase
- ios
- 다크모드
- Swift
- autolayout
- UITabBarController
- Realtime Database
- WebView
- NavigationLink
- 웹뷰
- dictionary
- SwiftLint
- gcd
- 문자열
- subscript
- Java
- LazyHStack
- UIButton
- 라이트모드
- SwiftUI
- RxSwift
Archives
- Today
- Total
점진적 과부하 개발 블로그
Swift 문법 정리 2 본문
반응형
computed property(계산 프로퍼티)
- property가 설정되거나 검색되는 시점에서 계산 또는 파생된 값
- 값을 리턴하는 게터(getter) 메서드
- 값을 대입하는 세터(setter) 메서드
import Foundation
class Human {
var age: Int = 20 // stored property
var weight: Double = 70 // stored property
var manAge: Int { // 메서드 같지만 computed property이다.
get{
return age-1
}
set(USAAge) {
age = USAAge + 1
}
}
func display() {
print("나이=\(age), 몸무게=\(weight)")
}
init(age: Int, weight: Double) {
self.age = age
self.weight = weight
}
}
var park = Human(age: 24, weight: 70)
park.display()
print(park.manAge)
print(park.age)
park.manAge = 5 // setter 호출
print(park.age)
method overloading : 생성자 중첩
- 매개변수의 개수와 자료형이 다른 같은 이름의 함수를 여러 개 정의
- 매개변수가 다른 두 생성자를 통해 두 가지 방법으로 인스턴스를 만들 수 있다.
import Foundation
class Human {
var age: Int = 20 // stored property
var weight: Double = 70 // stored property
func display() {
print("나이=\(age), 몸무게=\(weight)")
}
init(age: Int, weight: Double) { // 1
self.age = age
self.weight = weight
}
init(age: Int) { // 2
self.age = age
}
}
var park = Human(age: 24, weight: 70)
var park1 = Human(age: 30)
park.display()
park1.display()
Failable Initializer
- 실패 가능한 이니셜라이저, 실패하면 nil을 반환해준다. 그렇게 때문에? 옵셔널 타입으로 지정해 준다.
import Foundation
class Human {
var age: Int = 20 // stored property
var weight: Double = 70 // stored property
func display() {
print("나이=\(age), 몸무게=\(weight)")
}
init?(age: Int, weight: Double) {
if age <= 0 {
return nil
}
else {
self.age = age
}
self.weight = weight
} // failable initialize
}
failable initializer가 있는 클래스의 인스턴스 생성
var park = Human(age: 24, weight: 70)
park?.display() // 옵셔널 형으로 선언
if let park1 = park { // 1-2 옵셔널 바인딩
park1.display()
}
// 인스턴스 생성과 동시에 옵셔널 바인딩
if let park2 = Human(age: 20, weight: 80) {
park2.display()
}
// 인스턴스 생성하면서 바로 강제 언래핑
var park3 = Human(age: 30, weight: 90)!
park3.display()
// 옵셔널 인스턴스르 사용시 강제 언래핑
var park4 = Human(age: 40, weight: 100)
park4!.display()
상속
- 상속된 클래스는 부모클래스의 모든 기능을 상속받으며, 자신만의 기능을 추가한다.
- 상속받은 클래스들을 하위 클래스(subclass)또는 자식 클래스(child class)
- 하위 클래스가 상속받은 클래스는 부모 클래스(parent class) 또는 상위 클래스(super class)
- 상속은 클래스만 가능하다.
- 단일 상속 (single inheritance)
- 스위프트에서 하위 클래스는 단 하나의 부모 클래스만 상속받을 수 있다.
/*
class 클래스 이름: 부모 클래스 이름 {
//하위 클래스 정의
*/
import Foundation
class Human {
var age: Int = 20 // stored property
var weight: Double = 70 // stored property
func display() {
print("나이=\(age), 몸무게=\(weight)")
}
init(age: Int, weight: Double) {
self.age = age
self.weight = weight
}
}
class Student : Human {
// Human의 모든 것을 가지고 있다.
}
var park = Human(age: 24, weight: 70)
park.display()
var kang = Student(age: 19, weight: 60)
kang.display()
print(kang.age)
override
- 부모와 자식에 같은 메서드가 있으면 자식 우선
class Man{
var age : Int = 1
var weight : Double = 3.5
func display(){
print("나이=\(age), 몸무게=\(weight)")
}
init(age: Int, weight : Double){
self.age = age
self.weight = weight
}
}
class Student : Man {
var name : String = "박지용"
override func display() {
print("이름=\(name), 나이=\(age), 몸무게=\(weight)")
}
init(age: Int, weight : Double, name : String){
super.init(age:age, weight:weight)
self.name = name
}
}
var Park : Student = Student(age:23,weight:70.0,name:"인덕대")
Park.display() // 이름=인덕대, 나이=23, 몸무게=70.0
extension
- 스위프트 클래스, 구조체, 열거형, 프로토콜에 새로운 기능을 추가한다.
- 익스텐션은 하위 클래스를 생성하거나 참조하지 않고 기존 클래스에 메서드, 생성자(initializer), 계산 프로퍼티 등의 기능을 추가하기 위하여 사용한다.
extension 기존타입이름 {
// 새로운 기능
}
extension Double { // 표준 자료형 Double 구조체에 두 배의 값을 반환하는 프로퍼티를 추가
var a : Double {
return self * self
}
}
let myValue : Double = 3.0
print(myValue.a) // 9.0
print(2.0.a) // 4.0
접근제어(access modifier)
- 접근 속성(접근 수정자, 액세스 수정자, 액세스 지정자)는 클래스, 메서드, 멤버의 접근 가능성을 설정하는 객체 지향 언어의 키워드
- 구성 요소를 캡슐화 하는 데 사용한다.
- 노란색은 언어별 디폴트 접근 속성
public class Example {
fileprivate var animal : String = "Dog"
// 현재 소스 파일 내에서만 사용 가능
private func play() {}
// 현재 블럭 내에서만 사용 가능
func display(){}
}
출처: iOS 프로그래밍 기초 한성현 교수님 강의 내용 변형및 요약
반응형
'Swift > 문법' 카테고리의 다른 글
Swift Array(배열) 정리 (0) | 2022.02.08 |
---|---|
Swift 프로토콜(Protocol) (0) | 2022.01.08 |
Swift initializer (0) | 2022.01.07 |
Swift 클래스(class) (0) | 2022.01.06 |
Swift 클로저(Closure) (0) | 2022.01.06 |