Simple Value
- let은 상수값을 만드는데 사용되고 , var은 변수값을 만드는데 사용된다.
- 상수나 변수를 만들 때 값을 선언하면 컴파일러에서 해당 자료형을 추론하기 때문에 자료형은 생략해도 된다.
- 문자열에 값을 표현하기 위해서는 \()에서 괄호 안에 변수명을 넣어주면 된다.
Control Flow
- if문이나 switch문을 사용하여 조건을 명시하고 for-in, while, repeat-while 구문을 사용하여 반복 실행한다.
- if문을 사용할 때는 실행 코드가 한줄이더라도 { } 를 사용해야 한다.
- 명령문에서 if 조건의 반환값은 Bool 타입이어야 한다.
- switch문에서는 case 끝에 break를 작성할 필요가 없다.
- for 문에서 범위를 표현할 때 ...을 사용한다. ex) 0 ... 4 는 0부터 4까지 / 0 ..<4는 0부터 3까지
Functions and Closure
- func를 사용하여 함수를 선언하며 괄호 안에 매개변수 명과 자료형을 넣고 -> 뒤에 반환값의 자료형을 쓴다.
func greet(person: String, day: String) -> String {
return "Hello \(person), today is \(day)."
}
greet(person: "Bob", day: "Tuesday")
- 기본적으로 함수는 매개변수 이름으로 호출을 하는데 외부 매개변수와 내부 매개변수 둘 다 사용하는 경우 외부 매개변수를 호출하는데 사용을 하게 되고 선언 시 외부 매개변수 자리에 _를 사용하면 호출 할 때 생략이 가능하다.
- 외부 매개변수를 사용하지 않는 경우 내부 매개변수가 호출하는데 사용된다.
작성하거나 _인수 레이블을 사용하지 않도록 작성하십시오.
func greet(_ person: String, on day: String) -> String {
return "Hello \(person), today is \(day)."
}
greet("John", on: "Wednesday")
- 함수는 중첩해서 사용이 가능하다.
func returnFifteen() -> Int {
var y = 10
func add() {
y += 5
}
add()
return y
}
returnFifteen()
- 함수는 일급 객체로 함수를 변수에 저장할 수 있고, 매개변수로도 전달 가능하며 리턴값으로 사용 가능하다.
func makeIncrementer() -> ((Int) -> Int) {
func addOne(number: Int) -> Int {
return 1 + number
}
return addOne
}
var increment = makeIncrementer()
increment(7)
func hasAnyMatches(list: [Int], condition: (Int) -> Bool) -> Bool {
for item in list {
if condition(item) {
return true
}
}
return false
}
func lessThanTen(number: Int) -> Bool {
return number < 10
}
var numbers = [20, 19, 7, 12]
hasAnyMatches(list: numbers, condition: lessThanTen)
- 클로저 표현식은 독립적인 코드 블록이다.
- 일급 시민으로 전달인자, 변수, 상수 등으로 저장, 전달이 가능하다.
- 함수는 클로저의 일종으로, 이름 있는 클로저라고 생각하면 된다.
- 함수의 리턴값 자료형 뒤에 in을 붙여서 사용한다.
numbers.map({ (number: Int) -> Int in
let result = 3 * number
return result
})
Objects and Classes
- class 뒤에 이름을 선언하여 클래스를 생성한다.
class Shape {
var numberOfSides = 0
func simpleDescription() -> String {
return "A shape with \(numberOfSides) sides."
}
}
- 클래스에서 프로퍼티의 기본값을 지정하기 어려운 경우 init을 사용하여 초기값을 전달한다.
- 변수명이 겹치는 경우 self를 사용하여 구분한다.
class NamedShape {
var numberOfSides: Int = 0
var name: String
init(name: String) {
self.name = name
}
func simpleDescription() -> String {
return "A shape with \(numberOfSides) sides."
}
}
- 프로퍼티를 구현할 때 읽기와 쓰기 모두 가능한 get 블럭과 set 블럭을 사용할 수 있는데, set 블럭에서는 암시적 매개변수인
newValue를 사용할 수 있다.
class EquilateralTriangle: NamedShape {
var sideLength: Double = 0.0
init(sideLength: Double, name: String) {
self.sideLength = sideLength
super.init(name: name)
numberOfSides = 3
}
var perimeter: Double {
get {
return 3.0 * sideLength
}
set {
sideLength = newValue / 3.0
}
}
override func simpleDescription() -> String {
return "An equilateral triangle with sides of length \(sideLength)."
}
}
var triangle = EquilateralTriangle(sideLength: 3.1, name: "a triangle")
print(triangle.perimeter)
// Prints "9.3"
triangle.perimeter = 9.9
print(triangle.sideLength)
// Prints "3.3000000000000003"
'iOS-Study' 카테고리의 다른 글
iOS Study : 7주차 - 프로토콜 지향 프로그래밍(P.O.P) (0) | 2022.12.24 |
---|---|
iOS Study : 7주차 - 접근제어(모듈과 소스파일, 접근수준, 접근제어 구현 참고사항, private와 fileprivate, 읽기 전용 구현) (0) | 2022.12.24 |
iOS Study : 6주차 - 오류처리 / 고차함수 (0) | 2022.12.10 |
iOS Study : 6주차 - 타입 확장(프로토콜, 익스텐션) (0) | 2022.12.10 |
iOS Study : 5주차 - SwiftUI (0) | 2022.12.03 |