๐งโ๐ป ๋ชจ๊ฐ์ฝ 5์ฃผ์ฐจ
์ด์ ๊ธ ๐งโ๐ป ๋ชจ๊ฐ์ฝ 4์ฃผ์ฐจ ๋ณด๋ฌ๊ฐ๊ธฐ.
๐ ์ค๋์ ํ ์ผ
- ๐ฆ Swift ๊ฐ๋ ์ถ๊ฐ๊ณต๋ถ
- ๐จโ๐ป iOS Navigation ๊ณต๋ถ
- ๐จโโ๏ธ ๋ฐฑ์ค Online judge ๋ฌธ์ ํ์ด
๐ฆ Swift ๊ฐ๋ ์ถ๊ฐ๊ณต๋ถ
App Development With Swift ์๋ ๋จ์ํ Xcode์ iOS์ฑ์ ๋น๋์ ๊ด๋ จ๋ ์ง์ ๋ฟ๋ง ์๋๋ผ, Swift์ ๋ํ ๊ฐ๋ ๋ค์ ์ค๊ฐ์ค๊ฐ ์ฒจ๋ถํด ์๋ ค์ฃผ๋๋ฐ, ์ด ๋ด์ฉ๋ค์ ์ด์ ์ Swift ์ฑ ์ ๋ณด๋ฉฐ ๋น ๋ฅด๊ฒ ๊ณต๋ถํ์๋ ๋ณด์ง ๋ชปํ๋ ๊ฒ๋ค์ด ๊ฝค ๋ง์๊ณ , ์๊ฐ๋ณด๋ค ์ค์ ์์ ์ ์ฉํ๊ฒ ์ฐ์ผ ๋ถ๋ถ์ด ๋ง์๋ณด์๋ค. ๊ทธ๋์ ์ค๋์ ์ฑ ์ ์ฝ์ด๋ณด๋ฉฐ Swift๋ฅผ ๋ณต์ตํ๊ณ , ์ฒ์๋ณด๊ฑฐ๋ ์ ์ดํดํ์ง ๋ชปํ ๋ถ๋ถ์ ๋ํด์๋ ์ถ๊ฐ์ ์ผ๋ก ๊ณต๋ถ๋ฅผ ํด๋ณด๋ ค๊ณ ํ๋ค.
Nil handling
if let someting = possiblyNil {
print("not a nil")
}
else{
print("nil")
}
if let์ ํตํด์ optionalํ ๊ฐ์ handlingํด์ค ์ ์๋ค.
Nil init
struct Toddler {
var name: String
var monthsOld: Int
init?(name: String, monthsOld: Int){
if monthsOld < 12 || monthsOld > 36 {
return nil
} else {
self.name = name
self.monthsOld = monthsOld
}
}
}
์์ฑ์์ ?๋ฅผ ๋ถ์ฌ์ ์์ฑ์๊ฐ nil์ ๋ฐํํ ์ ์๋๋ก ํด์ค ์ ์๋ค. ์์ฑ์์ ๋ด๋ถ์์ ํน์ ์กฐ๊ฑด์ ๋ฐ๋ผ nil์ด ๋ฐํ๋๋ค.
Optional chaining
if let theResidence = person.residence {
if let theAddress = theResidence.address {
if let theApartmentNumber = theAddress.apartmentNumber{
print(theApartmentNumber)
}
}
}
๋ผ๊ณ ํ์ฌ optional์ unwrapํ ์ ์์ง๋ง ๋ ๋จ์ํ๊ฒ
if let theApartmentNumber = person.residence?.address?.apartmentNumber {
print(theApartmentNumber)
}
๋ก ํด์ค์๋ ์๋ค.
as?
let pets = allClientAnimals()
for pet in pets {
if let dog = pet as? Dog {
walk(dog: dog)
} else if let cat = pet as? Cat{
cleanLitterBox(cat: cat)
} else if let bird = pet as? Bird{
cleanCage(bird: bird)
}
}
๋ ํน์ ํ type์ผ๋ก downcastํ ๋ as?๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
as!
class SecondViewController : UIViewController{
var name: [String]?
}
func prepare(for segue: UIStoryboardSegue, sender: Any?){
let secondVC = segue.destination as! SecondViewController
secondVC.names = ["Peter", "Jamie", "Tricia"]
}
ํน์ type์ผ๋ก์ casting์ด ๋ฌธ์ ๊ฐ ์์์ด ํ์คํ๋ฉด ๊ฐ์ ๋ก as!๋ฅผ ์ฌ์ฉํ์ฌ downcastํ ์ ์๋ค.
Any
var items: [Any] = [5, "bill", 6.7, true]
if let firstItem = items[0] as? Int{
print(firstItem + 4)
}
9
Any๋ฅผ ์ฌ์ฉํ์ฌ ๋ญ๋ ์ง ๋ค์ด๊ฐ๊ฒ ํ ์ ์๋ค. AnyObject.Any๋ก ๊ฐ์ฒด๋ง ์ฌ ์ ์๊ฒ ํ ์๋ ์๋ค.
Guard
func singHappyBirthday(){
if birthdayIsToday{
if !invitedGuests.isEmpty{
if cakeCandleLit{
print("Happy Birthday to you!")
} else{
print("The cake's candles haven't been lit.")
}
} else {
print("It's just a family party.")
}
} else {
print("No one has a birthday today.")
}
}
if๋ง์ ์ฌ์ฉํ๋ค๋ฉด ์์ฒ๋ผ ๋ณต์กํ ๊ดํธ๋ก ๋๋ฌ์์ธ ๋ก์ง์ด ๋ง๋ค์ด์ง๊ฒ๋๋ค. ๋์ guard๋ฅผ ์ฐ๊ฒ๋๋ฉด
func singHappyBirthday(){
guard birthdayIsToday else{
print("No one has a birthday today.")
return
}
guard !invitedGuests.isEmpty else{
print("It's just a family party.")
return
}
guard cakeCandleList else{
print("The cake's candles haven';t been lit.")
return
}
print("Happy Birthday to you!")
}
๋ก ๊ฐ๋จํ๊ฒ ๋ํ๋ด์ง ์ ์๋ค. guard๋ ํด๋น ์กฐ๊ฑด์ด ์ฐธ์ด๋ฉด ๋์ด๊ฐ๊ณ ๊ฑฐ์ง์ธ ๊ฒฝ์ฐ์๋ง ๊ฑธ๋ฆฌ๋๋ก ํ๊ฒ์ด๋ค. ์ด๋ ๊ฒ ํจ์ผ๋ก์จ control flow๋ฅผ ๊ฐ๋จํ๊ฒ ํด์ค ์ ์๊ณ , ๋ค์ฌ์ฐ๊ธฐ๋ฅผ ๋ง์ดํ์ง ์์๋ ๋๋ฏ๋ก ๊ฐ๋
์ฑ๋ ์ข์์ง ์ ์๋ค.
Guard let
if let eggs = goose.eggs {
print("the goose laid \(eggs.count) eggs.")
}
๋ผ๊ณ if let์ ์ฌ์ฉํ๋ฉด if let์ ๊ดํธ ์์์๋ง ํด๋น ๋ณ์์ ์ ๊ทผ์ด ๊ฐ๋ฅํ์ง๋ง
guard let eggs = goose eggse else {return}
print("the goose laid \(eggs.count) eggs.")
guard let์ ์ฌ์ฉํด ์์๊ฐ์ด ์ฒ๋ฆฌํด์ฃผ๋ฉด ๋ฐ์์ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค. optionalํ ๊ฐ์ unwrapํ๋๋ฐ ์ฌ์ฉํ ์ ์๋ค.
calculateResult(a: 4, b: 8, c: nil)
func calculateResult(a: Int?, b: Int?, c: Int?) -> Int{
guard let aValue = a else {return 0}
guard let bValue = b else {result aValue}
guard let cValue = c else {result bValue}
return aValue + bValue + cValue
}
8
a๋ 4์ด๋ฏ๋ก aValue๊ฐ 4๊ฐ๋๊ณ , b๋ 8์ด๋ฏ๋ก bValue ๋ 8์ด๋๊ณ , c๊ฐ nil์ด๋ฏ๋ก bValue๊ฐ ๋ฐํ๋์ด 8์ด ๋ฐํ๋๋ค.
๐ณ ๋งํ๋ค..
iOS์ ๋ฐฑ์ค๋ ๊ณต๋ถํ๋ ค๊ณ ํ์ผ๋ ์๊ฐ๋ณด๋ค Swift๊ฐ๋ ์ ๋ณต์ตํ๋ค๋ณด๋ ์๊ฐ์ด ํ์ฉ ์ง๋๊ฐ ๋ฒ๋ ธ๋ค. ์์ง Swift์ ๋ํด ์ ๋ชจ๋ฅด๊ณ ์์์ ๋๊ผ๋ค. Swift๋ฅผ ์กฐ๊ธ ๋ ๊น๊ฒ ๊ณต๋ถํด์ ์ดํ์ ๋ฐฑ์ค๋ Swift๋ก ํ์ด๋ณด์์ผ๊ฒ ๋ค.
๋ค์ ๊ธ ๐งโ๐ป ๋ชจ๊ฐ์ฝ 6์ฃผ์ฐจ๋ณด๋ฌ๊ฐ๊ธฐ.
Comments