본문 바로가기
IOS 기초

[IOS 기초] 3주 Swift 문법 2(optional, as, nil, Any, AnyObject, 연산자, 제어문1)

by heeaeeeee 2024. 9. 19.

이름과 나이 출력하기

var name = "HeeAe" // : String 생략하는 것이 일반적임
var age = 23
var aa = "이름은 \(name)이고, 나이는 \(age)살입니다." //문자열을 만들 때는 양쪽에 큰 따옴표
//print("이름은 \(name)이고, 나이는 \(age)살입니다.") //\(출력하고 싶은 변수나 상수)
print(aa)

/* 출력결과
이름은 HeeAe이고, 나이는 23살입니다. */

 

상수와 변수 선언하기

var name = "HeeAe"
var age = 23
age = 20
var aa = "이름은 \(name)이고, 나이는 \(age)살입니다."
//print("이름은 \(name)이고, 나이는 \(age)살입니다.")
print(aa)

/* 출력결과
이름은 HeeAe이고, 나이는 20살입니다. */

 

Tuple을 사용하는 프로그래밍 언어

1. python

my_tuple = (1, "hello", 3.14)

2. C#

(int, string, double) myTuple = (1, "hello", 3.14);

3. Swift

let myTuple = (1, "hello", 3.14)

4. Scala

val myTuple = (1, "hello", 3.14)

5. F#

let myTuple = (1, "hello", 3.14)

6. Haskell

myTuple = (1, "hello", 3.14)

7. Ruby

my_tuple = [1, "hello", 3.14]  # Ruby uses arrays for tuple-like functionality

8. Rust

let my_tuple = (1, String::from("hello"), 3.14);

9. TypeScript

let myTuple: [number, string, number] = [1, "hello", 3.14];

10. Go

myTuple := [3]interface{}{1, "hello", 3.14}

 

튜플(Tuple) 실습

let myTuple = (95, 0.2, "Home")
print(myTuple.1)
let myTuple1 = (count: 905, length: 20.02, message: "Go ")
print(myTuple.1, myTuple1.length)

/* 출력결과
0.2
0.2 20.02 */

 

증가 연산자와 감소 연산자

 

비교 연산자

 

범위 연산자

let names = ["A", "B", "c", "D"]
for name in names[2...] { //[...2], [..<2]
    print(name)
}

/* 출력결과
c
D */

 

print swift

https://developer.apple.com/documentation/swift/print(_:separator:terminator:)

 

print(_:separator:terminator:) | Apple Developer Documentation

Writes the textual representations of the given items into the standard output.

developer.apple.com

 

for x in 1...5 {
    print(x,terminator: " ")
}

_로 참조체 생략 가능

for _ in 1...5 {
    print("HA")
}

 

repeat~while 반복문

repeat {
//
} while 조건식
var i = 10
repeat {
i=i-1
print(i) //출력 결과
} while (i > 0)

 

반복문에서 빠져나오기(break)

for i in 1...10 {
    if i > 5 {
        break
    }
print(i)
}

/* 출력결과
1
2
3
4
5
/*

 

if문 조건에서 콤마:조건나열(condition-list)

var x = 1
var y = 2
if x == 1 && y==2 { //논리식이 둘 다 참일 때
	print(x,y)
}
if x == 1, y==2 { //조건이 둘 다 참일 때, 두 조건을 콤마로 연결한 condition-list
	print(x,y)
}

var a : Int? = 1
var b : Int? = 2
print(a,b)
if let a1=a, let b1=b {
	print(a1,b1)
}
/* if let a1=a && let b1=b { //error: expected ',' joining parts of a multi-clause condition
	print(a1,b1)
/* }

 

switch-case문

switch 표현식
{
	case match1:
	  구문
	case match2:
	  구문
	case match3, match4: //각 case문 마지막에 break가 자동으로 들어 있음
	  구문
	default:
	  구문
}

 

switch-case에서 where절 사용하기

var temperature = 60
switch (temperature)
{
case 0...49 where temperature % 2 == 0:
	print("Cold and even")
case 50...79 where temperature % 2 == 0:
	print("Warm and even")
case 80...110 where temperature % 2 == 0:
	print("Hot and even")
default:
	print("Temperature out of range or odd")
}

 

where : 조건을 추가

var numbers: [Int] = [1, 2, 3, 4, 5]
for num in numbers where num > 3 {
	print(num)
}

 

옵셔널(optional)

값이 없을 때도 사용하려면 ? 사용 -> 옵셔널 int형

변수이름!하면 값이 없는 상태인 nil 저장 가능

옵셔널 괄호 안에 들어감

var x : Int?
print(x)
  x = 10
print(x, x!)

 

옵셔널 타입(매우 중요)

 

옵셔널 타입 강제 언래핑(forced unwrapping) 1

var x : Int? //옵셔널 정수형 변수 x 선언
var y : Int
x = 2
print(x)
x = x! + 2
print(x)
y = x!
print(y)

 

forced unwrapping

var x : Int?
if x != nil { // x와 != 사이의 공백이 있어야 함
    print(x!)
}

 

optional binding

//방법1
var x : Int?
x = 10
if let xx = x { //옵셔널 변수 x가 값(10)이 있으므로 언래핑해서 일반 상수 xx에 대입하고 if문 실행
print(x,xx)
}
else {
    print("nil")
}

//방법2

//방법3 : short form of if-let to the Optional Binding
var x : Int?
x = 10
if let x
print(x)
}
else {
    print("nil")
}

https://docs.swift.org/swift-book/documentation/the-swift-programming-language/revisionhistory/

https://docs.swift.org/swift-book/documentation/the-swift-programming-language/thebasics/

 

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

//방법1
var x : Int?
var y : Int?
x = 10
y = 5
if let xx = x, let yy = y {
    print(x, y, xx, yy)
}
else {
    print("nil")
}

//방법
var x : Int?
var y : Int?
x = 10
y = 5
if let x = x, let y = y {
    print(x, y)
}
else {
    print("nil")
}

 

두 가지 옵셔널 타입

 

Implicitly Unwrapped Optional

https://docs.swift.org/swift-book/documentation/the-swift-programming-language/thebasics/

 

두 가지 Optional 형 : Int? vs Int!

var x : Int?
x = 10
// x = x + 2
var y : Int!
y = 20
y = y + 2
print(x,y)

 

int?, int! 차이점을 표로 작성

특성 Int? (옵셔널) Int! (암시적 언래핑 옵셔널)
선언 방식 var num: Int? var num: Int!
초기값 nil nil
값 접근 언래핑 필요 직접 접근 가능
nil 가능성 명시적으로 표현 암시적으로 처리
안전성 더 안전 덜 안전 (런타임 오류 가능성)
사용 예시 if let num = num { print(num) } print(num)
nil 일 때 접근 안전 (오류 없음) 런타임 오류 발생
주 사용 케이스 값이 없을 수 있는 경우 초기화 이후 항상 값이 있다고 확신할 때

 

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

let defaultAge = 1
var age : Int?
age = 3
print(age) //과제:값은?
var myAge = age ?? defaultAge
//age가 nil이 아니므로 언래핑된 값이 나옴
print(myAge) //과제: 값은?

var x : Int? = 1
var y = x ?? 0
print(y)

 

 

 

IOS 강의 자료 참고했습니다.