공부(Swift 기본 문법) - 2

20827 단어 swiftiOSiOS

조건문

if문

Example Code

let animal: String = "dog"

if animal == "dog" {
	print("강아지 사료 주기")
} else if animal == "cat" {
	print("고양이 사료 주기")
} else {
	print("해당하는 동물 사료가 없음")
}

switch문

Example Code 1

let color: String = "green"

switch color {
	case "blue":
    	print("파란색")
    case "green", "yellow":
    	print("초록색 or 노란색")
    default:
    	print("찾는 색상이 없음")
}

Example Code 2

let temperature: Int = 30

switch temperature {
	case -20...9:
    	print("겨울")
    case 10...14:
    	print("가을")
    case 15...25:
    	print("봄")
    case 26...35:
    	print("여름")
    default:
    	print("이상 기후")
}

반복문

for문

Example Code

for i in 1...4:
	print(i)
    
let array: [Int] = [1, 2, 3, 4, 5]

for i in array:
	print(i)

while문

Example Code

var number: Int = 5

while number < 10 {
	number += 1
}

repeat-while문

다른 언어의 do-while문이랑 같은 기능

Example Code

var x: Int = 6

repeat {
	x += 2
} while x < 5

옵셔널

값이 있을 수도 있고 없을 수도 있다.
다른 언어에서 null이 swift에서는 nil이라고 한다.

var number: Int? = nil

옵셔널로 지정한 변수를 그렇지 않은 변수에 저장할 수 없다.

var optionalName: String? = "Park"

var requiredName: String = optionalName // 에러 발생(옵셔널이 아닌 변수에는 반드시 값이 저장되어야 함)

옵셔널 바인딩

옵셔널을 안전하게 처리하는 방법
옵셔널 값은 Optional()이라는 랩에 싸여 있기 때문에 unwrapping하는 과정이 필요하다.

명시적 해제

강제 해제

var number: Int? = 3

print(number!)

!를 사용
값이 nil일 경우, 강제 해제를 하면 에러가 발생하기 때문에 위험

비강제 해제(옵셔널 바인딩)

if문, while문, guard문에서 사용

// if문
if let result: Int = number {
}

// guard문
func test() {
	let number: Int? = 5
    guard let result: Int = number else { return }
    print(result)
}

값을 저장할 수 있는 경우에만 unwrapping되어 조건식에 부합하게 되기 때문에 에러가 발생할 위험이 없어진다.
if문의 경우에는 unwrapping한 변수를 if문 블록 내부에서만 사용할 수 있는 반면, guard문의 경우 unwrapping한 변수를 guard문이 속한 블록 전체에서 사용할 수 있다고 한다.

묵시적 해제

컴파일러에 의한 자동 해제

let value: Int? = 6

if value == 6 {
	print("6입니다.")
} else {
	print("6이 아닙니다.")
}

비교연산자를 통해 옵셔널 값을 비교하면 자동적으로 컴파일러가 unwrapping한다.

옵셔널의 묵시적 해제

let string: String = "12"
var stringToInt: Int! = Int(string) // 옵셔널의 묵시적 해제
print(stringToInt + 1)
print(stringToInt) // 이 경우에는 unwrapping 안 된다.

String to Int의 경우 String 변수에 숫자가 아닌 다른 문자열이 입력되면 nil값이 반환되기 때문에 옵셔널 값으로 선언해주어야 한다.
이 때 ?가 아닌 !를 사용하면 이는 옵셔널의 묵시적 해제에 해당되며, 이후 일반적인 연산에서 사용할 경우 unwrapping된다.

구조체

struct User {
	var nickname: String
    var age: Int
    
    func information() {
    	print("\(nickname) \(age)")
    }
}

var user = User(nickname: "Park", age: 25)

user.nickname
user.age
user.information()

클래스

class Dog {
	var name: String = ""
    var age: Int = 0
    
    func introduce() {
    	print("name \(name) age \(age)")
    }
}

var dog = Dog()

dog.name
dog.age
dog.introduce()

초기화 구문 init

생성자

init/deinit

class User {
	var nickname: String
    var age: Int
    
    init(nickname: String, age: Int) {
    	self.nickname = nickname
        self.age = age
    }
    
    init(age: Int) {
    	self.nickname = "Park"
        self.age = age
    }
    
    deinit {
    	print("deinit user")
    }
}

var user1 = User(nickname: "Park", age: 25)
var user2 = User(age: 25)

var user3: User? = User(age: 25)
user3 = nil // 이 경우 인스턴스가 더 이상 필요하지 않다고 판단하여 자동으로 deinit이 호출된다.

출처

패스트캠퍼스, 초격차 패키지 : 30개 프로젝트로 배우는 iOS 앱 개발 with Swift

좋은 웹페이지 즐겨찾기