override func viewDidLoad() {
super.viewDidLoad()
firstLabel.text = setUserNickname()
view.backgroundColor = example().0 //아래 적은 튜플의 첫번째 요소인 UIColor
emotionFirstButton.setImage(UIImage(named: example().2), for: .normal) //첫번째 버튼의 이미지
}
//배경색, 레이블, 이미지 - 타입의 제약 없이 쓸 수 있는건 튜플로 ( )
func example() -> (UIColor, String, String) {
let color: [UIColor] = [.yellow, .red, .systemPink]
let image: [String] = ["sesac_slime6", "sesac_slime7", "sesac_slime8", "sesac_slime5"]
return (color.randomElement()!, "고래밥", image.randomElement()!)
}
func setUserNickname() -> String {
let nickname = ["고래밥", "칙촉", "격투가"]
let select = nickname.randomElement()!
return "저는 \(select)입니다."
}
단, 위의 방법은 UILabel이 하나일 경우에만 쓸 수가 있다.
UILabel이 여러개이고 랜덤으로 값을 뿌려줘야되는 경우는 다른 방법으로 해야함.
아래는 UIButton이 여러개이고 랜덤으로 값을 뿌려줘야하는 경우에 대한 것임: (setTitle이용)
for 문 또는 while 문으로 해서 돌려줘야함
hashTags[i].setTitle(randomKeys[i], for: .normal)
//버튼 4개에 랜덤으로 신조어단어를 뿌려준다 (Enum 값 중에 가져와서 setTitle로 뿌려준다)
func randomWords() {
//중복 방지를 위해 newWords를 가져오기 위한 선언
var container: [String] = [ ] // 비어있는 배열. while을 돌면서 [윰차, 실매, 꾸안꾸... ] 식으로 쌓임.
while container.count < 4 {
let newWord = Enum.allCases.randomElement()! //enum을 가져오는거. 6개 중 하나의 값. 윰차
let data = newWord.rawValue //enum을 String형태로 가져온다. "윰차"
if !container.contains(data) {
buttonList[container.count].setTitle(data, for: .normal)
container.append(data)
}
}
}
위 코드 부연 설명>>
.randomElement() 의 형태를 알 수 있는 방법: ctrl + space바 = enum형태임을 알 수 있다.
.rawValue의 형태는 string
CaseIterable & Conclusion
그래서 검색하다가 알게된 CaseIterable 프로토콜. AllCases를 얻을 수 있어요.
enum: CaseIterable { // 추가
// static let allItems 는 지운다
}
func printDemoText(_ index: Int) {
var demoText: String? // 로그 찍을 변수
DemoFlag.allCases.forEach { // allCases를 가져올 수 있다.
if $0.rawValue.index == index {
demoText = $0.rawValue.text
}
print("text = \(demoText)")
}
'iOS > iOS SeSAC 2기 TIL' 카테고리의 다른 글
빌드 오류날 때 체크해 볼 것 (0) | 2022.07.18 |
---|---|
iOS swift 변수의 스코프 및 전역변수 (0) | 2022.07.18 |
iOS swift 과제 관련 오토레이아웃 (0) | 2022.07.15 |
iOS swift 팝업창 만들기 (0) | 2022.07.15 |
iOS swift unwind 화면전환(이전 화면으로 돌아가기) (0) | 2022.07.15 |