패스트캠퍼스) ios 개발 챌린지

[패스트캠퍼스 수강 후기] IOS개발강의 100% 환급 챌린지 21회차 미션

student513 2020. 11. 22. 14:17

클래스와 구조체에 대해 비교해보자
구조체는 자신의 형식을 복제해주고, 클래스는 자신을 복제해준다. 무슨 말일까?
코드로 이해해보자

PersonClass는 자신을 참조하는 변수를 할당해줄 수 있다.

이 경우 할당된 두 변수 pClass1, pClass2는 PersonClass라는 하나의 클래스만을 가리키고 있다.

그 클래스만을 가리키는 여러 개의 변수가 있을 수 있는 것이다

 

PersonStruct는 자신의 모양과 똑같은 분신을 복제해서 나눠준다

각 변수 pStruct1, pStruct2는 PersonStruct의 형식을 똑같이 갖고, 독자적인 정보를 저장할 수 있다.

구조체를 이용해 가장 가까운 편의점 찾기

func distance(current: Location, target: Location) -> Double {
    // 피타고라스..
    let distanceX = Double(target.x - current.x)
    let distanceY = Double(target.y - current.y)
    let distance = sqrt(distanceX * distanceX + distanceY * distanceY)
    return distance
}


struct Location {
    let x: Int
    let y: Int
}

struct Store {
    let loc: Location
    var name: String
    let deliveryRange = 2.0
    
    func isDeliverable(userLoc: Location) -> Bool {
        let distanceToStore = distance(current: userLoc, target: loc)
        return distanceToStore < deliveryRange
    }
}

// Given stores
let store1 = Store(loc: Location(x: 3, y: 5), name: "gs")
let store2 = Store(loc: Location(x: 4, y: 6), name: "seven")
let store3 = Store(loc: Location(x: 1, y: 7), name: "cu")


// Given printClosestStore func
func printClosestStore(currentLocation: Location, stores: [Store]) {
    var closestStoreName = ""
    var closestStoreDistance = Double.infinity
    var isDeliverable = false
    
    for store in stores {
        let distanceToStore = distance(current: currentLocation, target: store.loc)
        closestStoreDistance = min(distanceToStore, closestStoreDistance)
        if closestStoreDistance == distanceToStore {
            closestStoreName = store.name
            isDeliverable = store.isDeliverable(userLoc: currentLocation)
        }
    }
    print("Closest store: \(closestStoreName) deliverable: \(isDeliverable)")
}

// Set stores and myLocation
let stores = [store1, store2, store3]
let myLocation = Location(x: 2, y: 5)


// Use printClosestStore func to print
printClosestStore(currentLocation: myLocation, stores: stores)

 

도전과제

import UIKit

// 도전 과제
// 1. 강의 이름, 강사 이름, 학생수를 가지는 Struct 만들기 (Lecture)
// 2. 강의 어레이이와 강사이름을 받아서 , 해당 강사의 강의 이름을 출력하는 함수 만들기
// 3. 강의 3개 만들고 강사이름으로 강의 찾기


// CustomStringConvertible

struct Lecture: CustomStringConvertible {
    var description: String {
        return "Title: \(name), Instructor: \(instructor)"
    }
    
    let name: String
    let instructor: String
    let numOfStudent: Int
}

func printLectureName(from instructor: String, lectures: [Lecture]) {
    var lectureName = ""

    for lecture in lectures {
        if instructor == lecture.instructor {
            lectureName = lecture.name
        }
    }
    
    // let lectureName = lectures.first { $0.instructor == instructor }?.name ?? ""
    print("아 그 강사님 강의는요: \(lectureName)")
}


let lec1 = Lecture(name: "iOS Basic", instructor: "Jason", numOfStudent: 5)
let lec2 = Lecture(name: "iOS Advanced", instructor: "Jack", numOfStudent: 5)
let lec3 = Lecture(name: "iOS Pro", instructor: "Jim", numOfStudent: 5)
let lectures = [lec1, lec2, lec3]

printLectureName(from: "Jack", lectures: lectures)

print(lec1)

 

올인원 패키지 : iOS 앱 개발👉https://bit.ly/2FjWizq