화면에 Label 두 개로 명언과 이름을 띄워주고, 명언 생성 버튼을 클릭할 때마다 내용이 랜덤하게 바뀌는 기능을 구현해보자.
UIView
위에 UILabel
을 두개 올려놓아주었다.
이 때 명언의 길이가 매우 길 때를 대비해서 constraint priority를 설정해주어야 한다.
뷰 위에 올려진 오브젝트들은 Constraint 제약 조건에 따라 다른 오브젝트들의 크기에 따라 늘어나거나 줄어든다. 이 때, 어떤 오브젝트가 우선적으로 늘어나거나 줄어들지에 대해 Priority를 지정해 주어야 한다.
Content Hugging Priority
Compression Resistance Priority
=> 위의 명언 생성기 앱에서 명언 라벨과 이름 라벨로 예를 들어보자.
상대적으로 사람 이름은 거의 한 줄에서 끝나기 때문에 내용이 늘어나도 많이 보여주어야 하는 것은 명언!
-> 명언 라벨의 Hugging Priority
를 이름 라벨보다 줄인다.
명언이 계속해서 늘어나는 경우에, 명언이 좀 잘리더라도 이름 라벨을 보여줘야해!
-> 이름 라벨의 Compression Resistance Priority
를 명언 라벨보다 늘린다.
명언을 (명언, 이름) 형태로 저장해 줄 구조체를 만들어주자.
Swift 파일을 하나 생성하고 아래의 형태로 작성해준다.
import Foundation
//구조체
struct Quote {
let contents: String
let name: String
}
이후 controller 파일에서
let quotes = [
Quote(contents: "나는 나 자신을 빼 놓고는 모두 안다.", name: "비용"),
Quote(contents: "배고플 때는 먹어라.", name: "미야몽"),
Quote(contents: "몇 번이라도 좋다! 이 끔찍한 생이여...다시!", name: "니체"),
Quote(contents: "멍멍!", name: "강아지"),
Quote(contents: "야옹!", name: "고양이")
]
배열에 Quote 구조체의 형태로 객체 배열을 만들어준다.
버튼을 클릭할 때마다 명언 배열에서 랜덤하게 배열을 가져와 화면에 띄워준다.
@IBAction func tapQuoteGeneratorButton(_ sender: Any) {
let random = Int(arc4random_uniform(5)) //0~4 사이의 난수를 랜덤하게 만들어 줌
let quote = quotes[random]
self.quoteLabel.text = quote.contents
self.nameLabel.text = quote.name
}
arc4random_uniform(5)
처음 보는 함수! 0~4 사이의 난수를 랜덤하게 만들어 주는 함수이다.
이런 식으로 만든 난수로 명언 배열의 인덱스로 접근해 값을 가져와 띄워준다.
완성한 프로젝트 파일은 깃허브 링크로
저희 우치는 야옹이 아니라 웨옹이라고 하는데요?