์ต์
๋ Optional
์ค์ํํธ์ ์ต์
๋์ ์ผ์ข
์ ์์ ์ฅ์น์ด๋ค. ์์์น ๋ชปํ ๊ณณ์์ nil์ด ๋ฐ์ํ์ฌ ํ๋ก๊ทธ๋จ์ด ์๊ธฐ์น ์๊ฒ ์ข
๋ฃ๋๋ ๊ฒ์ ๋ง๊ธฐ์ํด ์ฌ์ฉํ๋ค. nil์ด ๋ ์ ์๋ ์ธ์คํด์ค๋ ๋ฐ๋์ ์ต์
๋ํ์
์ผ๋ก ์ ์ธํด์ผํ๋ค.
๋ฐ๋๋ก, ์ต์
๋ํ์
์ผ๋ก ์ ์ธ๋์ด์์ง ์์ ์ธ์คํด์ค๋ nil์ด ๋์ง ๋ชปํ๋ค! (์ผ๋ฐ ์๋ฃํ์ nil์ ์ต์ง๋ก ๋์
ํ ์๋ ์์)
์ต์
๋ ๋ฐ์ธ๋ฉ
if let์์ ์ธ๋ํ๊ณผ์ ์ด ์๋ฌต์ ์ผ๋ก ์ํ๋์ด ์ต์
๋์ ๊ฐ์ด ์์ ์์๋ก ์ง์ ๋๋ค.(theError)
var errorCodeString: String?
errorCodeString = "404"
if let theError = errorCodeString {
print(theError)
}
//errorCodeString์ด nil์ด ์๋๋ฉด theError์ ๊ฐ์ ๋์
ํ๊ณ ์ถ๋ ฅํด๋ผ.
/*
์ต์
๋ ๋ฐ์ธ๋ฉ
if let tempConstant = anOptional {
//tempConstant๊ฐ nil์ด ์๋๋ฉด ์ด๋ค ์ผ์ ํ๋ค.
} else {
//anOptional์๋ ๊ฐ์ด ์๋ค.(nil์ด๋ค.)
}
*/
์ต์
๋ ๋ฐ์ธ๋ฉ ์ค์ฒฉ
var errorCodeString: String?
errorCodeString = "404"
if let theError = errorCodeString {
if let errorCodeInteger = Int(theError) {
print("\(theError): \(errorCodeInteger)")
}
}
์ฌ๋ฌ ์ต์
๋ ์ธ๋ํ & ์ถ๊ฐํ๋จ
์ต์
๋๋ฐ์ธ๋ฉ์ ์ค์ฒฉํ์ง์๊ณ ์ฌ๋ฌ ์ต์
๋ ๊ฐ์ ๋ฐ์ธ๋ฉ ํ๋ ๋ฐฉ๋ฒ๋ ์๋ค.
if let theError = errorCodeString, let errorCodeInteger = Int(theError) {
print("\(theError): \(errorCodeInteger)")
}
๋จผ์ errorCodeString์ ์ธ๋ํํ์ฌ ๊ทธ ๊ฐ์ theError์ ์ ์ฅํ๊ณ , Int์ธ์คํด์ค๋ก ๋ณํํ๋ค. ๊ทธ ๊ฒฐ๊ณผ๋ ์ต์
๋์ด๊ธฐ๋๋ฌธ์(?) ์ธ๋ํํ์ฌ ๊ทธ ๊ฐ์ errorCodeInteger๋ก ๋ฐ์ธ๋ฉํ๋ค.
- ์ด๋ ๊ฒ ์ฌ๋ฌ ์ต์
๋์ ๋ฐ์ธ๋ฉ ํ๋ ๊ตฌ๋ฌธ์์๋ ๋ ๋ฐ์ธ๋ฉ์์ ํ ๋ฒ์ด๋ผ๋ nil์ด ๋ฆฌํด๋๋ฉด ์กฐ๊ฑด๋ฌธ์ ์คํ ์ฝ๋๋ ๋์ํ์ง ์๋๋ค.
์ถ๊ฐ ํ๋จ์ errorCodeInteger == 404
๋ถ๋ถ์ธ๋ฐ, ์ด๋ ์์ ๋ ์ต์
๋์ด ์ธ๋ํ๋์ด์ nil์ด ๋ฆฌํด๋์ง ์๋ ์กฐ๊ฑด, ์ดํ์ ์ถ๊ฐ๋ก errorCodeInteger๊ฐ 404์ธ ์กฐ๊ฑด์ ๋ปํ๋ค. ์ด๋ ๊ฒ if๋ฌธ์ ๋ชจ๋ ์กฐ๊ฑด์ด ๋ง์กฑํ ์์ ๊ทธ ๋ค์ ์ฝ๋๊ฐ ์คํ๋๋ค. ์ต์
๋ ๋ฐ์ธ๋ฉ๊ณผ ์ถ๊ฐ ํ๋จ์กฐ๊ฑด์ ๊ฐ์ด ,
์ ํจ๊ป ์จ์ฃผ์ด๋ ๋ฌธ๋ฒ์ ๋ง๋๋ค๋๊ฒ ํน์ง์ธ ๊ฒ ๊ฐ๋ค.
์ต์
๋ ์ฒด์ด๋
var errorCodeString: String?
errorCodeString = "404"
var errorDescription: String?
if let theError = errorCodeString, let errorCodeInteger = Int(theError), errorCodeInteger == 404 {
errorDescription = "\(errorCodeInteger + 200): resource was not found."
} //errorDescription์ ํ์
์ String? ์ด๋ค.
var upCaseErrorDescription = errorDescription?.uppercased()
//"604: RESOURCE WAS NOT FOUND."
errorDescription
//"604: resource was not found."
<์ฝ๋์ค๋ช
> errorCodeString์ String?ํ์
์ด๋ค. theError์ errorCodeString์ด nil์ด ์๋๋ฉด ๊ฐ์ ๋์
ํ๋ค. theError์ ํ์
์ String์ด๋ค. ์ด๋ฅผ Int๋ก ๋ณํํด์ errorCodeInteger์ ๋์
ํ๋ค. (errorCodeInteger์ ํ์
์ Int์ด๋ค.) ๋ง์ฝ ๊ทธ errorCodeInteger์ ๊ฐ์ด 404์ด๋ฉด ๊ทธ ๋ค์์ ์ฝ๋๊ฐ ์คํ๋๋ค.
upCaseErrorDescription๋ ์๋ฌ๋ฉ์์ง(errorDescription , String?ํ์
)์ ๋ชจ๋ ๋๋ฌธ์๋ก ํํํ๋ ์ธ์คํด์ค์ด๋ค. errorDescription์ ๋ถ์ ?๋ ์ต์
๋ ์ฒด์ด๋์ด๋ค.
errorDescription์ ๊ฐ์ด ์์๋๋ ๋๋ฌธ์๋ก ๋ณํํ ๋ฌธ์๊ฐ ์์ผ๋ฏ๋ก upCaseErrorDescription์ด nil๋ก ์ค์ ๋๋ค. ์ด ์์ ์์ ์ต์
๋ ์ฒด์ด๋์ ๋ฐ๋ผ ์ต์
๋์ด ๋ฆฌํด๋๋ค.
ํ์ง๋ง errorDescription์ ๊ฐ์ด ์๊ธฐ ๋๋ฌธ์ ์ค๋ช
ํ
์คํธ๋ฅผ ๋๋ฌธ์๋ก ๋ฐํํ๊ณ , ๋ณํ๋ ๊ฒฐ๊ณผ๋ฅผ upCaseErrorDescription์ ์ง์ ํ๋ค. ๋ฐ๋ผ์ ๊ฒฐ๊ณผ๋ ๋๋ฌธ์๋ก ๋ฐํ๋ ๋ฉ์์ง๊ฐ ์ถ๋ ฅ๋๋ค.
nil ๊ฒฐํฉ ์ฐ์ฐ์
์ต์
๋์์ ๊ฐ์ ๊ฐ์ ธ์ค๊ฑฐ๋ ์ต์
๋ ๊ฐ์ด nil์ด๋ฉด ์ด๋ค ๋์์ ํด๋ผ ๋ผ๋ ๋จ์ํ ์ฐ์ฐ (ex. print(โErrorโ)๊ฐ์ ๋จ์ํ ๋์์ด else๋ฌธ ๋ค์ ์ค๋ ๊ฒ)์ผ๋ ??
๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ๋จํ ์์ฑ ํ ์ ์๋ค.
let description: String
if let errorDescription = errorDescription {
description = errorDescription
} else {
description = "No Error"
}
// ๋จ์ํ ์ฐ์ฐ์ธ๋ฐ๋ ์ฝ๋๊ฐ ๋๋ฌด ๊ธธ๋ค.
์ด ์ฝ๋๋ ์๋์ ์ฝ๋์ ๋์ผํ๊ฒ ์๋ํ๋ค!
let description = errorDescription ?? "No Error"
??์ ์ผ์ชฝ์๋ ์ต์
๋์ด ์์ผํ๊ณ , ์ค๋ฅธ์ชฝ์ ๋น์ต์
๋ํ์
์ด ์์ผํ๋ค. errorDescription์ ์ต์
๋ํ์
.
์ผ์ชฝ ์ต์
๋์ด nil์ด๋ฉด ??๋ ์ค๋ฅธ์ชฝ ๊ฐ์ ๋ฆฌํดํ๋ค. ์ผ์ชฝ ์ต์
๋์ด nil์ด ์๋๋ฉด ์ต์
๋์ ํฌํจ๋ ๊ฐ์ด ๋ฆฌํด๋๋ค!
errorDescription = nil
let description = errorDescription ?? "No Error"
//๊ฒฐ๊ณผ ์ฌ์ด๋๋ฐ์๋ "No Error"๊ฐ ํ์๋๋ค.