๐Ÿ’ก TIL - 22.07.13

saniยท2022๋…„ 7์›” 13์ผ
2

๋ฐฐ์—ด ๋ฐ ์‚ผํ•ญ์—ฐ์‚ฐ์ž


// 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 ํƒ€์ž…์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜์—ฌ์•ผ ํ•œ๋‹ค.






return

์กฐ๊ฑด๋ฌธ ์•ˆ์—์„œ ๋‹ค ์ฒ˜๋ฆฌ๊ฐ€ ๋˜๋ฉด ์ด๋Ÿฐ ์›Œ๋‹์ด ๋œฌ๋‹ค
๋…ธ๋ž€์ƒ‰ ์›Œ๋‹์€ ์—๋Ÿฌ๊ฐ€ ์•„๋‹ˆ๋‹ˆ๊นŒ ๋„˜์–ด๊ฐ€๋Š” ์‚ฌ๋žŒ๋“ค์ด ์žˆ๋Š”๋ฐ
๊ทธ๊ฒŒ ์ ์  ์Œ“์ธ๋‹ค,,
ํ•ด๊ฒฐํ•˜๊ณ  ๋„˜์–ด๊ฐ€๊ธฐ!


์กฐ๊ฑด๋ฌธ ์•ˆ์—์„œ ๋ชจ๋“  ๊ฒฝ์šฐ๊ฐ€ ์ฒ˜๋ฆฌ๋˜๋ฉด
์กฐ๊ฑด๋ฌธ ๋ฐ–์—์„œ ๋ฆฌํ„ด๊ฐ’์„ ์ง€์ •ํ•ด ์ค„ ํ•„์š”๊ฐ€ ์—†๋‹ค


// 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() ํ•จ์ˆ˜๋„ ๋งค๊ฐœ๋ณ€์ˆ˜ ๊ฐ’์„ ๋ฐ”๊ฟ”์„œ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค





Enumeration - ์—ด๊ฑฐํ˜•

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)  // ๊ธด๊ธ‰์ ๊ฒ€

์—ด๊ฑฐํ˜• ์•ˆ์— ํ•จ์ˆ˜๋ฅผ ๋„ฃ์–ด์„œ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค





Xcode Tip

์™„๋ฒฝํ•˜๊ฒŒ ํŒŒ์ผ์„ ์ง€์šฐ๊ณ  ์‹ถ์œผ๋ฉด Move to Trash
๊ทธ๋ž˜์•ผ ๋‚˜์ค‘์— ๊ฐ™์€ ์ด๋ฆ„์œผ๋กœ ์ƒˆ ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด๋„ ๋ฌธ์ œ๊ฐ€ ์—†๋‹ค


๊ทธ๋Œ€๋กœ ๋ณต์ œํ•ด์„œ ์“ฐ๊ฒ ๋‹ค๋Š” ์˜๋ฏธ
ํ•ญ์ƒ ์ด ์ƒํƒœ๋กœ ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•œ๋‹ค

references๋กœ ๋„ฃ๊ฒŒ ๋˜๋ฉด
xcode ํ”„๋กœ์ ํŠธ ์•ˆ์— ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ
์›๋ž˜ ํŒŒ์ผ ๊ฒฝ๋กœ๋กœ ๋“ค์–ด ๊ฐ€๊ฒŒ ๋œ๋‹ค
๊ทธ๋Ÿฌ๋ฉด ํŒŒ์ธ๋”์—์„œ ํŒŒ์ผ ์‚ญ์ œํ•˜๋ฉด ์—‘์ฝ”์—์„œ๋„ ๋ชป ์“ฐ๊ฒŒ ๋œ๋‹ค





Class, Struct - ํด๋ž˜์Šค, ๊ตฌ์กฐ์ฒด

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 ์ฒ˜๋ฆฌ

profile
๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ’ป

0๊ฐœ์˜ ๋Œ“๊ธ€