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

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

student513 2020. 11. 8. 23:10

이번 시간에 배운 것은 타입 확인, local/instance 변수, closure함수이다.

타입확인 기능은 말 그대로 해당 변수의 타입을 확인할 수 있는 기능이다.

역시 스위프트라는 말이 나온다.

자바스크립트에서는 타입 명시기능이 없어서, 이를 개선하기 위해 타입스크립트가 등장했고

관련 프로젝트들은 타입스크립트를 채택하는 추세다.

 

그렇다면 왜 타입을 명시하는 것이 중요할까?

개발은 여러 사람이 작업하는 것이기 때문에 안그래도 외계어같은 코드를 좀 더 편하게 볼 수 있어야 한다.

다른 사람이 작성해놓은 함수를 사용한다 해보자

그 함수에 어떤 argument를 넘겨줘야할지 확실히 알아야 오류가 발생하지 않는다.

계산기 함수에 문자열을 입력할 수는 없지 않은가?

이런 일을 막기 위해서 변수의 타입을 명시해줄 필요가 있다.

 

스위프트에서는 디폴트 기능으로 타입을 명시할 수 있는 기능이 있나보다. 

커맨드를 누른 상태로 해당 변수를 클릭하면 변수의 타입이 나온다.

변수 선언 또한 

var x:Int = 0으로 해줄 수 있다.

local 변수와 instance 변수. instance는 몰라도 앞에 local 변수랑 비교하는 것을 보니

intance변수는 전역변수인가보다.

 

정확히 하자면 local은 메소드 내에서, instance는 클래스 내에서 참조가 가능한 변수다

클로저는 한마디로 '실행 가능한 코드블럭'이란다.

일단 이 녀석이 어디 쓰이는지 보자

@IBAction func showAlert(_ sender: Any) {
        let message = "가격은 $\(currentValue)입니다."
        
        let alert = UIAlertController(title: "Hello", message: message, preferredStyle: .alert)
        let action = UIAlertAction(title: "OK", style: .default, handler: nil)
        alert.addAction(action)
        present(alert, animated: true, completion: nil)
        refresh()
}

앨범 어플에서 alert를 담당하는 함수다.

코드는 위에서부터 순서대로 실행되기 때문에 refresh 버튼을 누르는 순간 화면의 가격은 변경되지만

alert의 가격은 변경되기 전이다. 순서가 이상하다

refresh버튼을 누르고 alert를 닫으면 가격이 업데이트 되길 바란다

class ViewController: UIViewController {
    
    var currentValue = 0
    @IBOutlet weak var priceLabel: UILabel!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        refresh()
    }

    @IBAction func showAlert(_ sender: Any) {
        let message = "가격은 $\(currentValue)입니다."
        
        let alert = UIAlertController(title: "Hello", message: message, preferredStyle: .alert)
        let action = UIAlertAction(title: "OK", style: .default, handler: {action in
            self.refresh()
        })
        alert.addAction(action)
        present(alert, animated: true, completion: nil)
    }
    
    func refresh() {
        let randomPrice = arc4random_uniform(10000) + 1
        currentValue = Int(randomPrice)
        priceLabel.text = "$\(currentValue)"
    }
}

그렇다면 ok버튼을 담당하는 action변수에 refresh()함수를 넣어줌으로써 의도된 앱을 만들 수 있다.

굳이 비교하자면 자바스크립트의 콜백함수를 닮았다고 해야할까?

 

 

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