swift 문법 총정리(2)-Operator, Optional

Updated:

Operator


let a = 10
let b = 20

a == b
//false

a != b
//true

if a == b {
	print("같다")
}else{
	print("다르다")
}

a == b ? print("같다") : print("다르다"

let aa = false

!aa
//true


//??
var aa: Int? 
//aa는 int값이 되거나 널값이 될 수 있다.

print(aa ?? 0)
//aa가 빈 값일 경우 0으로 나온다.
//숫자가 무조건 나와야 하는 경우 사용해주면 좋다.


//for
for index in 0...5{
	print("반복")
}
//0부터 5까지 반복을 해라(6번)

for index in 0..<5{
	print("반복")
}
//0부터 5보다 작은 값까지 반복(5번)

for index in 0..<5{
	print("반복\(index)")
}
//역슬래쉬하고 () 하면 그 값을 찍을 수 있다.

let myArray = ["a","b","c","d"]

for index in 0..<myArray.count{
	print("반복\(myArray[index])")
	}

for myValue in myArray[0...]{
	print("어레이 값: \(myValue)")
	}

문자에서 “+”는 쭉이어서 나온다.

optional type

매우 중요한 부분 type 뒤에 ?를 붙이면 optionaltype

optional의 가장 큰 특징은 값을 입력하지 않은 상태일 떄 nill값으로 들어간다. optional 설정을 안해주고 initialize를 안하면 오류가 발생

var myString: String? //Optional
var myString2: String = String() //Non-Optional
//""가 들어있다. 문자로서의 값은 들어있지 않지만 string type임은 선언되어 있는 상태이다.
//차이점은 nil은 아예 타입도 존재하징 않고 뭐가 있는지 없는지 전혀 모르는 상태이다.

myString2 = nil
//오류발생 / nil이라는 값을 가질 수 없다.

//상황에 따라 그 값이 어떤 타입인지 조차 모를 경우가 있다. 그때 option type을 사용
//ex ) 시험을 보는데 0점인 경우도 있고(다 틀려서) 아직 안본 경우도 있다.
//점수를 0으로 기본값 설정하면 안본것인지 다 틀린건지 알 수가 없다.

var myScore: Int?

if myScore == nil{
	print("E")
	}

myScore=0
if myScore<60{
}
//에러 발생, 값이 없을 수도 있는 optional type에서는 값이 주어져있어도 오류가 발생한다.


//값이 무조건 있다고 가정하는 방식
// !
// Force unwrapping 
if myScore! < 60 {

	print("F")
}

Unwrapping ( 옵셔널을 벗겨내는 형태)

//Force unwrapping (강제)

var myScore: Int?
//optional type은 반드시 unwrap이 필요
//nill값인데 값 비교에 넣으면 오류 발생
//반드시 nil 체크가 필요하다
//언제 어떻게 nil값이 들어갈 지 모르니 반드시 nil 체크해주는 로직을 추가해주어야 한다 
if myScore == nil{
	print("nil")
	}
else if myScore! < 100 {
	print("has score")
}

Optional Binding

if let hasScore = myScore{
	if hasScore < 50 {
	}
}else{
}
// optionnal 타입을 받아오는데 있으면 받아오고 nil이면 else가 실현.

Optional Chaining

class People {
	var score: Score?
}
class Score{
	var testName: String?
}

var people = People()
people.score?.testName
//해당하는 object가 optional type이면 optional type이라고 표시하기 위해 ?를 붙이는 형태이기도 하고
//해당하는 optional property가 ?로 쓰여져있으면 어느 object든 nil이면 이 object결과값은 nil이 나온다.

var people: People? = People()

if let hasName = people?.score?.testName{
	if hasName == "park"{

	}
}
//optional chaining과 optional binding을 함께 쓰고 있다.
//initializing을 한 상태에서는 force unwrapping을 사용할 수 있다.
//ex. people!.score?.testName
//people?.score!.testName (오류발생)
//score initializing이 안되어있다.

Nil Coalescing Operator

닐 병합 연산자

var myName: String?

print(myName ?? "jin")
//값이 nil일 경우 반드시 출력할 값을 주고 싶을 떄 ??를 이용한다.
//myName이 nil이면 jin을 출력시킨다. myName에 jin값이 들어가는 것은 절대 아니다.

var myScore: Int?
if myScore ?? 0 < 50{
	print("number")
}
//50보다 작거나 nil인 경우 실현

Reference

인프런 강의

Tags: ,

Categories:

Updated:

Leave a comment