어흥
[Swift] Property, Method 본문
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
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