iOS 프로그래밍 4주차(3주차)

CDH·2024년 9월 25일

출처 : smileHan - iOS 프로그래밍 기초

프로그래밍 언어에서 가장 많이 사용한 연산자 - 대입연산자


* swift 에서는 증감 연산자에서 ++과 --를 사용하지 않음

  • x++ // x를 1 증가시킴, Swift 3에서 없어짐, x+=1
  • x-- // x를 1 감소시킴, Swift 3에서 없어짐, x-=1

swift는 이퀄(=)을 3개 사용하기도 함 (주소값 비교)

  • ==는 값이 같은가?
  • ===는 동일한 메모리 주소인가?

    class Person {}
    let person1 = Person()
    let person2 = person1
    let person3 = Person()
    print(person1 === person2) // true
    print(person1 === person3) // false


(^) 는 caret 이라고 부르고, (||) 는 (더블)파이프 라고 불림


범위 연산자![]


중요! 클래스 vs 객체 vs 인스턴스 비교


Java의 객체 예시

class MyClass {
    String name;

    MyClass(String name) {
        this.name = name;
    }

    void greet() {
        System.out.println("안녕하세요, " + name + "님!");
    }

    public static void main(String[] args) {
        MyClass obj = new MyClass("뤼튼"); // 객체 생성
        obj.greet(); // 메서드 호출
    }
}

for문 사용법


배열

let names = ["A", "B", "C", "D"]
for name in names[...1] {
    print(name)
}

결과
A
B

let names = ["A", "B", "C", "D"]
for name in names[1...] {
    print(name)
}

결과
B
C
D


break


if문


중요! condition - list


* swift에서는 각 case문 마지막에 break가 자동으로 들어 있다


중요(캡처) switch-case 문에서 범위 지정

  • 이런 식으로 쓰면 에러
let anotherCharacter: Character = "a"
switch anotherCharacter {
case "a": // Invalid, the case has an empty body
case "A":
	print("A글자")
default:
	print("A글자 아님")
}
//error: 'case' label in a 'switch' should have at least one executable statement

switch-case 결합


where절 (완벽하지 않은, 추가의 개념이기에 '절'이라고 함)


fallthrough (제어문)



옵셔널(optional)

  • swift에서 값이 없다는 뜻의 nil 이 있는데, 예외처리를 할 때 필요한 개념(옵셔녈)이다.

예시

var x : Int = 10
print(x)
var y : Int?
print(y) // 여기서 y!를 입력하면 에러가 뜸

결과
10
nil


옵셔널 타입


(강제) 언래핑

  • 옵셔널에 래핑된 값을 강제로 풀 때 뒤에 !를 넣어줌


옵셔널 변수는 그냥 사용하지 못하고, 값을 변경하거나 출력할 때 언래핑 작업 (뒤에 !)이 필요하다

예시

var x : Int = 10
var y : Int? = 20
y = y! + 1
print (y!) // !가 없으면 Optional(21) 가 나옴

결과
21 // !가 없으면 Optional(21) 가 나옴


중요! 옵셔널 정의를 하지 않으면 이런 식으로 에러가 뜸

forced unwrapping

var x : Int?
x = 10
if x != nil { // 띄어쓰기를 제대로 해줘야함. 대입연산자와 옵셔널 타입이 혼동되기 때문
    print(x!)
} else {
    print("nil")
}

optional binding

3가지 방법이 있다

var x : Int?
x = 10
if let x {
    print(x)
}

결과
10

코드

var x : Int?
x = 10
if let xx = x {
    print(x, xx)
}

결과
Optional(10) 10

코드

var x1 : Int?
if let xx = x1 { //옵셔널 변수 x1이 값이 없어서 if문의 조건이 거짓이 되어 if문 실행하지 않고 else로 감
	print(xx)
} else {
	print("nil")
}

결과
nil


optional binding(여러 옵셔널 값 동시에 언래핑)

코드

var x : Int?
var y : Int?
x = 10
y = 20
// var x : Int? = 10
// var y : Int? = 20 <br>
if let xx = x {
    print(xx)
}
else {
    print("nil")
}
if let yy = y {
    print(yy)
}
else {
    print("nil")
}

결과
10
20


두 가지 옵셔널 타입 (implicitly - 자동으로 언래핑함)

코드

var x : Int? = 10
var y : Int! = 20 // 느낌표로 선언함
var z : Int = 1
print (x,y,z)
z = x! + 1
print(z)
z = y + 1
print(z)
if let x, let y {
    print(x,y)
}

결과
Optional(10) Optional(20) 1
11
21
10 20


nil-coalescing operator (nil병합연산자) ??

코드

var x : Int? = 10 // 10을 넣지 않으면 결과가 nil로 출력됨
var y : Int = 0
y = x ?? 1
print(x,y)

결과
Optional(10) 10 // 10을 넣지 않으면 결과가 nil로 출력됨

0개의 댓글