어흥

[Swift] Property, Method 본문

iOS

[Swift] Property, Method

라이언납시오 2020. 9. 1. 11:14
728x90
반응형

(아직 공부가 더 필요합니다...)


[Property]

1. 정의

  : 값을 클래스(class), 구조체(structure), 열거형(enum)와 연결한다 << 말보단 예시나 설명을 통해 이해하는 것이 빠르다

 

2. 종류

  - Stored Property(저장 프로퍼티) : 상수와 변수값을 인스턴스로 저장하며, 클래스와 구조체에서만 사용

  - Computed Property(연산 프로퍼티) : 값을 연산하는 것이 주된 역할이며, 연산 값을 반환합니다. 클래스, 구조체, 열거형에서 모두 사용

  - Type Property(타입 프로퍼티): 프로퍼티를 타입 자체와 연결하는 경우

 

3. 예제 코드

import UIKit

struct Person{
    //Stored Property
    var firstName: String{
//        willSet{
//            print("willSet: \(firstName) --> \(newValue)")
//        }
        didSet{
            print("didSet: \(oldValue)-->\(firstName)")
        }
    }
    var lastName: String
    
    lazy var isPopular: Bool = {
        if fullName == "Jay Park" {
            return true
        } else{
            return false
        }
    }()
    
//    var fullName: String{
//        return "\(firstName) \(lastName)"
//    }
    var fullName: String{
        //불러오기
        get{
            return "\(firstName) \(lastName)"
        }
        //설정
        set{
            if let firstName = newValue.components(separatedBy: " ").first{
                self.firstName=firstName
            }
            if let lastName = newValue.components(separatedBy: " ").last{
                self.lastName=lastName
            }
        }
    }
    
    //type Property
    static let isAlien: Bool = false
}

var person = Person(firstName: "Jason", lastName: "Lee")

person.firstName            //Jason
person.lastName             //Lee

person.firstName = "Jim"
person.lastName = "Kim"

person.firstName            //Jim
person.lastName             //Kim

person.fullName             //Jim Kim
person.fullName = "Jay Park"

person.firstName            //Jay
person.lastName             //Park


Person.isAlien              //false

person.isPopular            //true

//didSet을 통해 다음과 같은 결과가 디버깅 창에 출력
/*
didSet: Jason-->Jim
didSet: Jim-->Jay
*/

 

 

4. 부가 내용(Method <-> Computed Property)

- Setter이 필요? -> Computed Property

- Setter이 불필요-> 계산이 많이 필요? or DB access나 File IO가 필요? -> Method

- Setter이 불필요-> 계산이 많이 필요? or DB access나 File IO가 불필요 -> Computed Property

 


[Method]

 

1. 정의

 : 메소드는 특정 타입과 연관된 함수.

 

2. 특징

: 클래스, 구조체 그리고 열거형에서 인스턴스 메소드로 정의할 수 있으며, 주어진 타입의 인스턴스에 작업을 위한 특정 작업이나 기능을 캡슐화

 

3. 예제 코드

import UIKit

struct Lecture{
    var title: String
    var maxStudents: Int = 10
    var numOfRegistered: Int = 0
    
    func remainSeats() -> Int{
        let remainSeats = lec.maxStudents - lec.numOfRegistered
        return remainSeats
    }
    
    mutating func register() -> Void{       //stored property를 변경시키는 경우 mutating 사용
        //등록된 학생수 증가시키기
        numOfRegistered+=1;
    }
    //type property
    static let target: String = "Anybody who wants to learn"
    
    static func 소속이름() ->String{
        return "어딘가"
    }
}

var lec = Lecture(title: "iOS Basic")
lec.remainSeats()       //10

lec.register()
lec.register()
lec.register()
lec.register()
lec.remainSeats()       //6

Lecture.target          //"Anybody who wants to learn"
Lecture.소속이름()          //"어딘가"


struct Math {
    static func abs(value: Int) -> Int{
        if value > 0{
            return value
        }
        else {
            return -value
        }
    }
}
Math.abs(value: -20)

//Math 확장
extension Math{
    static func square(value: Int) -> Int{
        return value * value
    }
    
    static func half(value: Int) -> Int{
        return value/2
    }
}

Math.square(value: 5)           //25
Math.half(value: 20)            //10

var value: Int = 3

extension Int {
    func square() -> Int{
        return self * self
    }
    func half() -> Int{
        return self/2
    }
}
value.square()          //9
value.half()            //1

 

 

참고 블로그

- minsone.github.io/mac/ios/swift-methods-summary

- zeddios.tistory.com/245

 

728x90
반응형

'iOS' 카테고리의 다른 글

[Swift] TableView  (0) 2020.09.08
[Swift] 겪은 에러  (0) 2020.09.07
[Swift] Protocol  (0) 2020.08.28
[Swift] Structure, Class  (0) 2020.08.27
[Swift] Closure  (0) 2020.08.26
Comments