1급 객체(first class object) 1급 시민(first class citizen)
Swift는 함수를 데이터 타입처럼 처리할 수 있음 => 함수를 상수 또는 변수에 할당하는 것이 가능
ex)
func inchesToFeet (inches: Float) -> Float {
return inches * 0.0833333
}
func outputConversion(converterFunc: (Float) -> Float, value: Float) { //함수를 매개변수로 사용
let result = converterFunc(value) //주의 : 매개변수명(inches:) 안씀
print("Result = \(result)")
}
let toFeet = inchesToFeet //함수를변수에 저장
outputConversion(converterFunc:toFeet, value: 10)
func getToFeet () -> (Float) -> Float { //매개변수형 리턴형이 함수형
return toFeet //함수를 리턴
}
let r = getToFeet()
print(r(10))
swift의 함수는 1급 객체이다. 1급 객체(first class object) 또는 1급 시민(first class citizen) 다음 조건을 충족하는 객체를 1급 객체라고 한다.
1) 변수에 저장할 수 있다.
2) 매개변수로 전달할 수 있다.
3) 리턴값으로 사용할 수 있다.
클로저(Closure)
Closure (computer programming - Wikipedia
익명함수 , 클로저 표현식은 매개변수를 받거나, 값을 반환하도록 만들 수도 있음
리턴형 생략 & 매개변수 생략하고 단축인자(shorthand argument name)사용 & 클로저에 리턴값이 있으면 마지막 줄을 리턴하므로 return생략 가능
{(<매개변수 이름>: <매개변수 타입>, … ) -> <반환 타입> in // 자료형은 (<매개변수 타입>, …) -> <반환 타입>
// 클로저 표현식 코드
}
ex)
let multiply = {(val1: Int, val2: Int) -> Int in
return val1 * val2
}
let result = multiply(10, 20) //주의 : 매개변수명(inches:) 안씀
후행 클로저(trailing closure)
Closures — The Swift Programming Language (Swift 5.5)
클로저가 함수의 마지막 argument라면 마지막 매개변수명(cl)을 생략한 후 함수 소괄호 외부에 클로저를 작성
ex)
func math(x: Int, y: Int, cal: (Int, Int) -> Int) -> Int {
return cal(x, y)
}
var result : (Int,int) -> Int
result = math(x: 10, y: 20, cal: {(val1: Int, val2: Int) -> Int in
return val1 + val2
}) //클로저 소스를 매개변수에 직접 작성
print(result)
result = math(x: 10, y: 20) {(val1: Int, val2: Int) -> Int in
return val1 + val2
} //후행 클로저
print(result)
result = math(x: 10, y: 20, cal: {(val1: Int, val2: Int) in
return val1 + val2
}) //리턴형 생략
print(result)
result = math(x: 10, y: 20) {(val1: Int, val2: Int) in
return val1 + val2
} //후행 클로저, 리턴형 생략
print(result)
result = math(x: 10, y: 20, cal: {
return $0 + $1
}) //매개변수 생략하고 단축인자(shorthand argument name)사용
print(result)
result = math(x: 10, y: 20) {
return $0 + $1
} //후행 클로저,, 매개변수 생략하고 단축인자사용
print(result)
result = math(x: 10, y: 20, cal: {
$0 + $1
}) //클로저에 리턴값이 있으면 마지막 줄을 리턴하므로 return생략
print(result)
result = math(x: 10, y: 20) {
$0 + $1
} //후행 클로저,return 생략
print(result)
클래스 (class)
Structures and Classes — The Swift Programming Language (Swift 5.5)
인스턴스(instance) - 실제로 메모리에 할당된 객체(object)
객체의 구성 - 데이터 변수(data variable) or 속성(property) & 함수 or 메서드(method)
class 새로운 클래스 이름 : 부모 클래스 {
// 프로퍼티 - “프로퍼티” 부분은 클래스 내에 포함되는 변수(var)와 상수(let)를 정의한다.
// 인스턴스 메서드 - “인스턴스 메서드”는 객체가 호출하는 메서드를 정의한다.
// 타입(type) 메서드(클래스 메서드) - “타입 메서드”는 클래스가 호출하는 메서드를 정의한다.
}
“타입 메서드”는 클래스가 호출하는 메서드를 정의한다.
프로퍼티(property)
Properties — The Swift Programming Language (Swift 5.5)
stored property는 초기값이 있어야 함, nil 포함
메서드
Methods — The Swift Programming Language (Swift 5.5)
인스턴스(instance) 메서드, 클래스 또는 타입(class or type)메서드 ,인스턴스 메서드는 인스턴스에서 동작
ex)
class Man{
var age : Int = 1
var weight : Double = 3.5
func display(){
print("나이=\(age), 몸무게=\(weight)")
} }
var kim : Man = Man()
kim.display() //인스턴스 메서드는 인스턴스가 호출
print(kim.age)
'잡다한지식 > iOS프로그래밍기초' 카테고리의 다른 글
iOS 학습과정(6주차) - 과제,소스 (0) | 2021.10.06 |
---|---|
iOS 학습과정(6주차) - Swift 문법 (0) | 2021.10.05 |
iOS 학습과정(4주차) - Swift 문법 (0) | 2021.09.23 |
iOS 학습과정(3주차) - Swift 문법 (0) | 2021.09.16 |
iOS 학습과정(2주차) - 자료형 (0) | 2021.09.09 |