이번 챕터에서는 버튼을 눌렀을 때 소리가 재생되는 자일로폰 앱을 공부했다.
import UIKit
import AVFoundation
class ViewController: UIViewController {
var player: AVAudioPlayer!
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func keyPressed(_ sender: UIButton) {
print(sender.currentTitle)
// print(sender.titleLabel?.text)
playSound()
}
func playSound() {
let url = Bundle.main.url(forResource: "C", withExtension: "wav")
player = try! AVAudioPlayer(contentsOf: url!)
player.play()
}
}
코드에도 보이듯이 AVFoundation이 import되어야 한다.
지금까지 IBAction은 UI만 연결이 되는 줄 알았다.
하지만, 아니었다...
솔직히 이건 정말 깜놀...
사진에 보이는 것처럼, IBAction에 마우스를 올려 놓으면, 모든 버튼들이 연결되었다고 보여주는 것을 확인할 수 있다.
swift는 DataType을 알아내는 능력이 있어서 모든 데이터를 지정해주지 않아도 된다.
var number = 123 //swift는 이미 123을 보고 Int 타입이라는 것을 알고 있다.
var number: Int = 123 //즉 이렇게 타입을 넣어주지 않아도 에러가 안 났던 이유라고 볼 수 있다.
//주의
var number = "abc" //하지만 주의할 점은, 그 데이터 타입을 바꾸지는 못 한다.
이 부분은 코딩을 배우면서 항상 헷갈렸던 부분이다.
func greeting () {
}
//보통 이렇게 함수를 만든다는 것은 알고 있었지만 () 이 자리에 정확히 뭐가 들어가야 하는지는 잘 몰랐다.
//정답은 input이었다. 아래 쉬운 예시로 공부를 했다.
func greeting(whoToGreet: String) {
print("Hello \(whoToGreet)")
}
//이러한 방식처럼 parameter인 whoToGreet를 받아서 무언가를 해줘 라고 하는 것과 같다.
//그리고 그 parameter의 타입인 argument도 같이 써줘야 한다!
그럼 선언을 했을 때, 이렇게 input 값을 항상 넣어서 사용할 수가 있다.
@IBAction func keyPressed(_ sender: UIButton) {
playSound(soundName: sender.currentTitle!)
sender.alpha = 0.5
print("start")
DispatchQueue.main.asyncAfter(deadline: .now() + 0.2) { //0.2초 후에 실행
sender.alpha = 1.0
print("end")
}
강의의 미션으로 등장해서, 검색을 해서 코드를 찾아냈다.
Result:
끝!