Udemy iOS by Angela Yu / Function, Optionals

Garam·2023년 6월 23일
0

Udemy iOS by Angela Yu

목록 보기
4/9

Function statement

func name(name dataType) {

}


func greeting(whoToGreet: String){

print(Hello \(whoToGreet))

}


greeting(whoToGreet:Sally)

Switch statement

switch hardness {

	caseSoft:

		print(5)

	caseMedium:

		print(7)

	caseHard:

		print(12)

	default:

		print(error)

}

switch는 조건이 5개 이상일 경우에 사용하면 좋다.

Range

a…b (Closed range)
a..<b (Half open range)
…b (One sided range)

Dictionary statement

var dict: [String: Int] = [Hello: 1234]

Optional

  • var username: String? = nil
    //no data stored in var username = containing nil value
  • !: unwrapping data, 안에 데이터가 있음을 확신하고 상자를 여는 행위. 데이터가 없을 때 crash
  • 이미지 내의 if statement는 safety check: prevents crashing when we do something with nil value


  • UIButton의 currentTitle의 value가 nil일 경우도 있으므로 = 이름 없는 버튼이 있을 수도 있기 때문에 발생하는 오류


  • 느낌표를 붙여줌으로써 컴퓨터에게 “이 값은 확실히 String이라는 것을 내가 안다”라고 알린다.
  • 딕셔너리의 값을 불러올 때에도 결과값은 항상 Optional이다. 오타나 기타 오류로 인해 잘못된 값을 불러올 수도 있기 때문이다.


다음은 완성된 앱의 코드이다!!!
Stack Over Flow에서 검색해서 나온 코드와
안젤라 선생님의 설명을 짬뽕해서 만들었다.

다행히 잘 작동한다 😘

걸리는 건 중간에 Xcode가 시키는대로 픽스버튼을 눌렀는데,
그 결과 많은 변수들에 self가 붙었다
파이썬 기초만 떼고 온 터라
이 self가 여기서 무슨 역할을 하는지 잘 감이 안온다...

파이썬에서는 이게 클래스에서
변수나 메소드 앞에 붙어서 무슨 기능을 하는 거였는데,,,
,,,, ^^
음...
뒤의 강의들 좀 더 듣고 좀더 레벨업 하면 이해되겠지?
^___^

import UIKit
import AVFoundation

class ViewController: UIViewController {
    
    var player: AVAudioPlayer!
    
    let eggTimes = ["Soft": 5, "Medium": 7, "Hard": 12]
    var timer = Timer()
    var totalTime = 0
    
    
    @IBOutlet weak var progressBar: UIProgressView!
    @IBOutlet weak var titleLabel: UILabel!
    @IBAction func hardnessSelected(_ sender: UIButton) {
        
        timer.invalidate()
        titleLabel.text = "Progressing..."
        let hardness = sender.currentTitle!
        var secondsRemaining = eggTimes[hardness]! * 60
        totalTime = eggTimes[hardness]! * 60
        
        timer = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true) { (Timer) in
            if secondsRemaining > 1 {
                print ("\(secondsRemaining) seconds")
                secondsRemaining -= 1
                self.progressBar.progress = 1-Float(secondsRemaining)/Float(self.totalTime)
            } else {
                self.timer.invalidate()
                self.progressBar.progress = 1
                self.titleLabel.text = "DONE!"
                self.playSound()
            }
        }

        }
    func playSound() {
        let url = Bundle.main.url(forResource: "alarm_sound", withExtension: "mp3")
        player = try! AVAudioPlayer(contentsOf: url!)
        player.play()
                
    }
    }

0개의 댓글