ios개발자를 위한 여정 - 3

박경현·2022년 5월 1일
0
post-thumbnail

udemy가 좋긴한데 이 분이 만들어준 github안에 있는 내용에 추가를 하는 식으로
되어있어서 ㅋㅋ 내 깃허브로 내가 만든 어플들을 옮기는 방법을 찾아봐야겠다

이번에는 간단한 segue를 사용해서 화면 전환을 하는 방법과 다른 화면에 데이터를 주는 방법을 배웠다.
String(format:"%.2f", ~~)이거는 앞으로 한달간은 안 잊을거 같다ㅋㅋ 너무 많이 써서

어플소개

팁을 포함한 계산을 한 뒤 n 빵하는 어플이다

완성본을 미리 보고 어떻게 저런 값이 나오나 계산기에 5번 치고 이해했다 ㅋㅋㅋ

(전체금액 + (전체금액* 팁%) ) / n명의 사람

저 계산 결과가 화면처럼 다음 화면에 나오면 성공이다!!

어플 구성

mvc패턴의 방식을 구상하려고 노력 중이다 그래서 이번 어플도 최대한 mvc를 의식해서 만들어봤다
하지만 이 어플은 따로 저장할 데이터도 없고 model에서 무언가 변형해서 값을 view에 주는게 없어서 controller만 정의 했다

ViewController

솔직히 계산이 제일 힘들었다 ㅋㅋ

@IBOutlet var billTextFeild: UITextFeild!
@IBOutlet var zeroPctButton: UIButton!
@IBOutlet var tenPctButton: UIButton!
@IBOutlet var twentyPctButton: UIButton!
@IBOutlet var splitNumberLabel: UILabel!

var tip = 0.10
var numberOfPeople = 2
var billTotal = 0.0
var finalResult = "0.0"

override func viewDidLoad() {
	super.viewDidLoad()
}
@IBAction func tipChanged(_ sender: UIButton) {
	zeroPctButton.isSelected: false
    tenPctButton.isSelected: false
    twentyPctButton.isSelected: false
	sender.isSelected = true
    
	let buttonTitle sender.currentTitle!
    let buttonTitleMinusPercentSign = Stirng(buttonTitle().dropLast())
    
    let buttonTitleAsANumber = Double(buttonTitleMinusPercentSign)!
    
    tip = buttonTitleAsANumber / 100

}
@IBAction func stepperValueChanged(_ sender: UIStepper){

	splitNumberLabel.text = String(format:"%.0f", sender.value)
    numberOfPeople = Int(sender.value)

}

@IBAction func calculatePressed(_ sender: UIButton) {
	let bill = billTextFeild.text! 
    
    if bill != "" {
    	billTotal = Double(bill)!
        let result = billTotal * (1+tip) / Double(numberOfPeople)
        finalResult = String(format:"%.2f", result)
        
    }
    self.performSegue(withIdentifier: "PassTotalNumber", sender: self)

}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
	if(segue.identifier == "PassTotalNumber") {
    	let destinationVC = segue.destination as? ResultViewController
        
        destinationVC?.splitNumber = numberOfPeople
        destinationVC?.tips = Int(tip*100)
        destinationVC?.totalNumber = finalResult
    
    }

}

tipChanged()함수에서 droplast()로 마지막에 있는 %를 빼는게 인상적이었다
그리고 sender.isSelected = true만으로 나머지를 false시킬 수 있는것도 if~else를 반복하지 않는다는 점에서 또 한번 배웠다.

우리가 전달하고 싶은 데이터가 있을때 그 데이터의 가공이 끝난 곳에
self.performSegue를 적어서 데이터 가공이 끝난 후 넘겨준다는 것이 이번 수업에서 핵심이었다

prepare()에서 destination을 지정해주고 perform이 끝나면 이 안에 내용을 넘겨주는 것 !!!

ResultViewController

체크표시한 부분이 체크안되어 있으면 화면이 안 넘어간다!

  1. 일단 main에서 만든 viewController를 cocoatouchclass와 연결하기 위해서 main에서 클래스이름을 지정해주었다!!
@IBoutlet var settingLabel: UILabel!
@IBoutlet var totalLabel: UILabel!

var totalNumber = "0.0"
var splitNumber = 2
var tips = 10

override func viewDidLoad() {
	super.viewDidLoad()
    
    totoalLabel.text = totalNumber
    settingLabel.text = "Split between \(splitNumber) people"
	
}
@IBAction func recalculatedPressed(_ sender: UIButton) {
	dismiss(animated: true, completion:nil)
}

간단하게 viewDidLoad()에는 화면에 보일 요소들을 지정해 주었다

유일한 버튼인 Recalculate는 누르면 다시 뒤로 가게끔 dismiss만 선언했다

segue부분

main에서 만들어줄때 presentModally로 선택을 해줘서 모달창 처럼 다음 화면이 나왔다
추가로 segue이 경우 연결부분의 identifier를 설정해줘야 오류가 뜨지않고 정상적으로 destination을 찾아간다!

피드백

다시 한번 블로그에 적으니까 안 보였던 부분이 제대로 보이면서 깊이있게 이해하게 되었다 왜 정리를 해야하는지 다시한번 느끼게 된 순간이다.
앞으로도 꾸준히 정리를 해야 더 성장하는 개발자가 되겠구나,,,ㅋㅋㅋ

profile
SW로 문제를 해결하려는 열정만 있는 대학생

0개의 댓글