값의 별칭을 만들어 놓는 경우, myTuple.0 , myTuple.1 이 아닌 이름으로 튜플에 접근 가능하다.
let myTuple = (age : 10, score : 191.3 ,comment : "GoodDev")
print(myTuple.age, myTuple.score , myTuple.comment) // 10 , 191.3 , "GoodDev"
아래 방법을 forced unwrapping이라고 한다. if let은 다른개념임. (헷갈릴게없나..?)
var x : Int?
if x != nil {
print(x!)
}else{
print("nil이에용")
var x : Int?
if let xx = x {
print(xx)
}else{
print("nil이에용")
// if let . : lastName이 Optional타입이므로 if let을 활용하여 바인딩해준다.
func printName (firstName : String, lastName : String?) {
if let lName = lastName {
print(lname,firstName)
}else{
print("성이 없네요")
}
// guard let . : 조건이 만족하지 않는 경우, else 뒤의 코드가 실행된다.
guard let lName = lastName else {
print("성이 없네요.")
return
}
print(lName,firstName)
}
printName(firstName : "현웅" , lastName : "서")
우리가 사용하는 Xcode에는 기본적으로 Optional에 관련된 enum이 정의되어 있다.
public enum Optional<Wrapped> {
case none
case some(Wrapped)
}
var x : Int? = Optional.some(10)
var y : Int? = Optional.none // print 시, nil 값 반환
var z : Optional<Int> = 30 // print 시, Optional(30) 반환
다운캐스팅은 부모 인스턴스를 자식 클래스로 변환하는데 사용한다.
*성공확신이 있을 경우, as! 를 활용하여 강제 변환 시켜줄 수 있음.
**성공확신이 없을 경우, as? 를 활용하여 안전하게 변환 시켜줄 수 있음.
is를 활용하면지정된 객체가 MyClass라는 이름의 클래스의 인스턴스인지 검사할 수 있다.
class MyClass { }
var x : MyClass = MyClass()
if x is MyClass{
print("Yes, x is MyClass Instance.")
}
비교연산을 빠르게 하기위해서 사용할 수 있으며, if else 대용으로 사용 할 수 있다.
var x = 1
var y = 2
print("Largest number is \( x > y ? x : y)")
// Largest number is 2
앞에 항이 nil값을 갖는다면, 뒤에 있는 항을 출력시킨다.
let defaultColor = "black"
var userDefinedColor : String?
var myColor = userDefinedColor ?? defaultColor
print(myColor) // black이 출력됨.
진짜 다섯번 출력됨.
for _ in 1...5 {
print("안녕 난 다섯번 출력될래.")
}
// 꼭 아래랑 같이 쓸 필요없음.
for i in 1...5 {
print("\(i) 안녕")
}