var isopen = false
if !isopen { // (==true)가 생략 됨, !는 반전 효과
}else{
}
n짝, n쌍
var topTitle = ("메인화면", "mainIcon.png") //()는 튜플
topTitle.0 //"메인화면"
var topTitle = (aa: "메인화면", "mainIcon.png")
topTitle.aa //가시성이 좋음
값이 있을 수도 없을 수도 있다.
var myage: Int? = 0 //?으로 옵셔널 표시
if myage == nil {
...
}
0이나 공백이 값이 없는게 아니다.
var a: Int? = 10 //옵셔널은 타입 추론이 되지 않음
var b: Int? = 10
var c = a + b
Int? -> Int, String? -> String 으로 변환한다.
//coalesce 만약 값이 있다면 사용하고 nil이라면 0으로 대체한다.
var c = (a ?? 0) + b
//force unwrap, 값이 무조건 있다고 가정함. 확신없으면 사용 x
var d = a! + b!
//if Statements
if a != nil { //값이 있을때만 받아와서 실행
print(a!) //값이 있을때만 받아오기떄문에 강제 unwrapping해도 괜찮음.
}
-> 10 //(a!)로 강제 언랩핑 안 했을경우에는 optional(10)으로 출력
//if let, if var
if let hasNumber = a { //값이 있을때만 받아와서 실행. unwrapping까지 동시에 됨.
print(hasNumber)
}
-> 20
//guard let, guard var
func abc() {
guard let hasNumber = a else { //guard는 값이 있어야만 아래 구문으로 이어짐
return
}
print("end")
}
return은 가장 바깥 쪽에서 사용 불가. ( 클래스나 함수 안쪽에 있지 않음)
guard는 이 구문이 만족하지 않는다면 아래 코드도 실행하지않고 종료됨.
if는 만족하지 않더라도 if절 밖으로 나옴
같은 타입끼리만 연산 가능하다. (Type safe 타입이 엄격하다.)
String도 + 연산 가능하다.
let aa = "hi"
let bb = " hello"
let cc = aa + bb
//"hi hello"
소수 형태인 경우 %연산이 되지 않는다.
if b.truncatingRemainder(dividingBy: 2) == 0 //b가 소수형태일 경우 % 연산자를 사용할 경우 에러발생
print("짝수")
}else{
print("홀수")
}
문자간 비교연산을 하면 아스키코드 값을 기반으로 참거짓을 판별한다
a < b //true
숫자만 입력받을 수 있어야한다면,
let inputValue = "7"
if inputValue >= "\u{30}" && inputValue <= "\u{39}" { //u{30}은 0이고, u{39}는 9이다.
print("숫자다")
}else{
print("숫자가 아니다')
}