// 100๊ฐ์ ์์(๊ฐ์ ๋ชจ๋ 0)๋ฅผ ๊ฐ๋ ๋ฐฐ์ด
var array = Array(repeating: 0, count: 100)
type(of: array) // Array<Int>.Type
// 1๋ถํฐ 100๊น์ง์ ์์๋ฅผ ๊ฐ๋ ๋ฐฐ์ด
var array2 = [Int](1...100)
// var array2: [Int]? = [Int](1...100) // ์ต์
๋๋ก ๋ง๋ค๊ณ ์ถ์ ๋
type(of: array2) // Optional<Array<Int>>.Type
if array2?.count == 0 { // nil์ด ์์ ์ ์๊ธฐ ๋๋ฌธ์ ์ต์
๋ ์ฒด์ด๋
print("๊ฐ์ด ์์ต๋๋ค")
} else {
print(array2?.count) // "Optional(100)\n"
}
if array2 == nil { // nil์ด ์์ ์ ์๊ธฐ ๋๋ฌธ์ ์ต์
๋ ์ฒด์ด๋
print("๊ฐ์ด ์์ต๋๋ค")
} else {
print("๊ฐ์ด ์์ต๋๋ค")
}
// ์ ๋ค์ฏ ์ค์ ํ ๋ฒ์
// ์ผํญ์ฐ์ฐ์ >> ์กฐ๊ฑด ? ใ
ใ
: ใดใด
let result = array2 == nil ? "๊ฐ์ด ์์ต๋๋ค" : "๊ฐ์ด ์์ต๋๋ค"
// ๋ฌผ์ํ ์์๋ ํจ์๊ฐ ์ฌ ์ ์๋ค. ๋จ, Bool ํ์
์ ๋ฐํํ๋ ํจ์์ฌ์ผ ํ๋ค.
์กฐ๊ฑด๋ฌธ ์์์ ๋ค ์ฒ๋ฆฌ๊ฐ ๋๋ฉด ์ด๋ฐ ์๋์ด ๋ฌ๋ค
๋
ธ๋์ ์๋์ ์๋ฌ๊ฐ ์๋๋๊น ๋์ด๊ฐ๋ ์ฌ๋๋ค์ด ์๋๋ฐ
๊ทธ๊ฒ ์ ์ ์์ธ๋ค,,
ํด๊ฒฐํ๊ณ ๋์ด๊ฐ๊ธฐ!
์กฐ๊ฑด๋ฌธ ์์์ ๋ชจ๋ ๊ฒฝ์ฐ๊ฐ ์ฒ๋ฆฌ๋๋ฉด
์กฐ๊ฑด๋ฌธ ๋ฐ์์ ๋ฆฌํด๊ฐ์ ์ง์ ํด ์ค ํ์๊ฐ ์๋ค
// Swift 5.1 ๋ถํฐ return ์๋ต ๊ฐ๋ฅ
@discardableResult // ๋ฐํ๊ฐ์ ์ ํ์ ์ผ๋ก ์ฌ์ฉํ ๋
func randomNumber() -> Double {
// ์ฐ์ฐํด์ ๋ฐฐ๊ฒฝ ์ปฌ๋ฌ ๋ณ๊ฒฝ ๋๋ ํ
์คํธํ๋์ ํ
์คํธ๋ฅผ ๊ต์ฒด, ํค๋ณด๋ ๋ด๋ฆฌ๋ ๊ธฐ๋ฅ ๋ฑ
Double.random(in: 1...100) // ํ ์ค๋ก ๋ฆฌํด์ด๋ฉด ๊ฐ๋ฅํ์ง๋ง ์ ์ ์ด๋ค
// ํ ์ค์ง๋ฆฌ ํจ์๊ฐ ๋ณ๋ก ์๊ธฐ๋ ํ๊ณ
// ๊ฐ๋
์ฑ์ ์ธ ์ธก๋ฉด์์ ๊ทธ๋ฅ ์ฐ๋ ๊ฒ ๋ซ๋ค
}
ํจ์์์ ๋งค๊ฐ๋ณ์์ ๊ธฐ๋ณธ๊ฐ์ ์ ํด๋ ์ ์๋ค
๊ทธ๋ฌ๋ฉด ํจ์ ํธ์ถ ์,
๊ธฐ๋ณธ๊ฐ์ ์ฌ์ฉํ๋ ํจ์์
๋งค๊ฐ๋ณ์์ ๊ฐ์ ๋ณ๊ฒฝํ ์ ์๋ ํจ์๋ค์ด ๋ฌ๋ค
print("์๋
ํ์ธ์", separator: "123", terminator: "456") // ์๋
ํ์ธ์456
print("์๋
ํ๊ฐ์ธ์", separator: "123", terminator: "456") // ์๋
ํ๊ฐ์ธ์456
print() ํจ์๋ ๋งค๊ฐ๋ณ์ ๊ฐ์ ๋ฐ๊ฟ์ ํธ์ถํ๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ค
enum Gender: String { // ์์ X
case male = "๋จ์ฑ"
case female = "์ฌ์ฑ"
case none
}
var gender: Gender = Gender.none
gender.rawValue // ์ํ๋ฒณ ๊ทธ๋๋ก "none" // rawValue๋ ํญ์ ์กด์ฌํ๋ค
// Switch ๊ตฌ๋ฌธ ํ์ฉ - ๊ฒฝ์ฐ์ ์์ ๋ํ ๋์์ด ๋ ์์ ์ ์ด๋ค
switch gender {
case .male: print("๋จ์ฑ์
๋๋ค")
case .female: print("์ฌ์ฑ์
๋๋ค")
case .none: print("์์ง ์ ํํ์ง ์์์ต๋๋ค")
//default: // 100%์ ๋ํด ๋์ํ ๊ฒฝ์ฐ default ์ฌ์ฉํ ํ์ ์์
// print("์ค๋ฅ์
๋๋ค")
}
100%์ ๋ํด ๋์ํ ๊ฒฝ์ฐ default ์ฌ์ฉํ ํ์ ์์
โ enum์ผ๋ก ํ๋๊น ์ฝ๋๊ฐ ๋ ๊ธธ์ด์ง๋ ๊ฒ ๊ฐ์์
โ์ง๊ธ์ ์ฝ๋๊ฐ ์งง์์ ๋น๋ก์ ์ผ๋ก ๋ดค์ ๋ ๋ ๊ธธ์ด๋ณด์ด์ง๋ง, ๋์ค์ ์ฝ๋๊ฐ ๊ธธ์ด์ง๋ฉด ๊ฐ๋
์ฑ ์ธก๋ฉด์์๋ ๋ ๋ซ๋ค
๋ณดํต Raw Value(์์๊ฐ)์ ํ์
์ Int, String ์ ๋๋ค
enum HTTPCode: Int {
case OK // 0
case NO_PAGE // 1
case NOT_FOUND = 404
case SERVER_ERROR // 405
func showStatus() -> String{
switch self {
case .OK: return "์ ์์
๋๋ค"
case .SERVER_ERROR: return "๊ธด๊ธ์ ๊ฒ"
case .NOT_FOUND: return "์๋ชป๋ ๋ฌธ์ "
case .NO_PAGE: return "ํ์ด์ง๋ฅผ ์ฐพ์ ์ ์์"
}
}
}
var networkStatus: HTTPCode = .SERVER_ERROR
let resultStatus = networkStatus.showStatus()
print(resultStatus) // ๊ธด๊ธ์ ๊ฒ
์ด๊ฑฐํ ์์ ํจ์๋ฅผ ๋ฃ์ด์ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค
์๋ฒฝํ๊ฒ ํ์ผ์ ์ง์ฐ๊ณ ์ถ์ผ๋ฉด Move to Trash
๊ทธ๋์ผ ๋์ค์ ๊ฐ์ ์ด๋ฆ์ผ๋ก ์ ํ์ผ์ ๋ง๋ค์ด๋ ๋ฌธ์ ๊ฐ ์๋ค
๊ทธ๋๋ก ๋ณต์ ํด์ ์ฐ๊ฒ ๋ค๋ ์๋ฏธ
ํญ์ ์ด ์ํ๋ก ํ์ผ์ ์ถ๊ฐํด์ผ ํ๋ค
references๋ก ๋ฃ๊ฒ ๋๋ฉด
xcode ํ๋ก์ ํธ ์์ ์๋ ๊ฒ์ฒ๋ผ ๋ณด์ด์ง๋ง
์๋ ํ์ผ ๊ฒฝ๋ก๋ก ๋ค์ด ๊ฐ๊ฒ ๋๋ค
๊ทธ๋ฌ๋ฉด ํ์ธ๋์์ ํ์ผ ์ญ์ ํ๋ฉด ์์ฝ์์๋ ๋ชป ์ฐ๊ฒ ๋๋ค
super.viewDidLoad() ์๋๋ผ๋ ๋น์ฅ์ ๊ด์ฐฎ์ ๋ณด์ด์ง๋ง
๋ด๋ถ์ ์ผ๋ก ์ด๋ค ๋ฌธ์ ๊ฐ ์๊ธธ์ง ๋ชจ๋ฅด๊ธฐ ๋๋ฌธ์
๊ผญ super.ViewDidLoad()๋ฅผ ํด ์ฃผ์ด์ผ ํ๋ค
struct๋ ์์์ด ์๋๋ค
S - Struct
์์์ด ์ ๋๊ฒ ๋ง๋ค์ด์ ธ ์๋ค
UIKit์ ํด๋์ค
iOS ์์๋ ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ๊ฐ์ฒด๋ผ๊ณ ํ๋ค
Struct - ๊ฐ ํ์
Class - ์ฐธ์กฐ ํ์
ํด๋์ค์ ์ค์ง์ ์ธ ๋ฐ์ดํฐ๋ ๋ค๋ฅธ ๊ณต๊ฐ์ ์ ์ฅ์ด ๋์ด ์๋ค
// MARK: - ๊ตฌ์กฐ์ฒด: ๊ฐ ํ์
var nickname = "๊ณ ๋๋ฐฅ"
var subNickname = nickname
subNickname = "์น์ด"
print(nickname) // ๊ณ ๋๋ฐฅ
print(subNickname) // ์น์ด
// MARK: - ํด๋์ค: ์ฐธ์กฐ ํ์
class Monster { // SuperClass์ด์ BaseClass(์ด๋ค ํด๋์ค๋ ์์๋ฐ์ง ์๊ธฐ ๋๋ฌธ)
var clothes = "Orange + Christmas"
var speed = 5
var power = 20
var expoint: Double = 500
func attack() {
print("๊ณต๊ฒฉ!!!")
}
}
var miniMonster = Monster()
var bossMonster = miniMonster
bossMonster.power = 5000
print(miniMonster.power) // 5000 // 20์ด ์๋๋ค
print(bossMonster.power) // 5000
class BossMonster: Monster { // Subclass
var levelLimit = 500
func bossAttack() {
print("์คํ์
๊ณต๊ฒฉ")
}
// ์ฌ์ ์
override func attack() {
super.attack() // SuperClass์ ํจ์ ํธ์ถ
print("์ค๋ฒ๋ผ์ด๋ ๊ณต๊ฒฉ!")
}
}
var finalBoss = BossMonster()
finalBoss.bossAttack() // ์คํ์
๊ณต๊ฒฉ
finalBoss.levelLimit // 500
finalBoss.speed // 5
finalBoss.clothes // "Orange + Christmas"
finalBoss.attack()
// ๊ณต๊ฒฉ!!! // SuperClass์ ํจ์ ํธ์ถ
// ์ค๋ฒ๋ผ์ด๋ ๊ณต๊ฒฉ! // ์ฌ์ ์ํ ํจ์ ํธ์ถ
โ ๋ฐํ๊ฐ์ด ์๋ ํจ์์์๋ if๋ else if์์ ๋ชจ๋ ์ฒ๋ฆฌ๊ฐ ๋ค ๋์ด๋ else๊ฐ ์์ผ๋ฉด missing return ์ค๋ฅ๊ฐ ๋จ๋๋ฐ else ๊ฐ ํ์์ธ๊ฐ์?.?
โ ์ฐ๋ฆฌ ์
์ฅ์์๋ ๋ชจ๋ ๊ฒฝ์ฐ์ ์๊ฐ ์ฒ๋ฆฌ๋๋ ๊ฒ์ฒ๋ผ ๋ณด์ฌ๋
์ฝ๋์ ์ธ ๋ฌธ๋ฒ์์๋ ์๋๊ธฐ ๋๋ฌธ์ else ์ฒ๋ฆฌ