본문 바로가기

14일 만에 아이폰 앱 만들기

14일 만에 아이폰 앱 만들기(11) - State Properties

14일 만에 아이폰 앱 만들기(11) - State Properties

지난 포스팅에서 카드게임의  버튼을 만드는 것까지 진행했다. 이제는 각자 카드에 해당하는 데이터를 컨트롤하도록 해보자.

카드게임 프로젝트를 불러오자.

 

자 이제 이걸 요리해보자.

 

ContentView에 property를 추가로 입력해 주자. ContentView struct 내에서 저 값들을 참조할 수 있다.(같은 scope이기 때문)

카드 이미지를 불러올 때 이제 문자열이 아닌 변수를 통해서 불러오도록 하자.

문자열 값이 아닌 변수를 호출

 

점수도 마찬가지로 불러오면 되는데 Int값을 String값으로 변경해주어야 한다.

String으로 변경해서 입력

 

이제 버튼을 클릭할 때 저 변수의 값들이 변경하게 하면 된다. 그렇게 하기 위해서 버튼의 클로저의 내용을 바꿔보자. 일단 playerCard 변수의 텍스트를 변경하기 위해 버튼이 action에 다음과 같이 입력하였다.

Button(action: {
    // Update the cards
    playerCard = "card3" // 오류 발생
    cpuCard = "card12" // 오류 발생
    
    // Update the scores
    playerScore += 1 // 오류 발생
    cpuScore += 1 // 오류 발생
    
}, label: {
    Image("dealbutton")
})

property를 변경하려고 하면 오류가 뜰 것이다. struct내에서 property는 기본적으로 변경을 하지 못하게 되어있다. 변경이 가능하게 만들어주려면 해당 property의 var 키워드 앞에 @State라고 적어준다. 그러면 이제 해당  property는 값을 변경할 수 있게 된다.

 

State 추가

 

그리고 추가로 @State 뒤에 private까지 추가 해주어야 한다. 왜냐면 값이 함부로 변경되면 안 되기 때문이다.  struct 내부에서만 변경될 수 있게 하기 위해 private 키워드를 추가하자.

 

 

 

이제 오류가 사라졌을 것이다. 시뮬레이션을 돌려보자. 버튼을 누를 때 카드와 점수가 바뀌면 제대로 하고 있다는 것이다.

클릭하면 카드가 샥

 

버튼을 누르면 계속 점수는 올라가고 카드는 한 번만 바뀌지 계속 바뀌진 않을 것이다. 일단 카드는 계속 랜덤하게 변경되어야 한다. 그렇게 하기 위해서는 랜덤하게 수를 만들어내는 함수를 사용해야 한다.

 

카드 번호는 2에서 13까지 있기 때문에 이 안에서 랜덤하게 수를 생성해야 한다. 

 

랜덤한 수를 생성하고 랜덤한 텍스트 만들기

 

랜덤하게 숫자가 생성이 되고 card라는 텍스트와 합쳐져서 결국엔 카드 이미지의 이름이 되는 것을 볼 수 있다. 그리고 숫자는 Int 타입이기 때문에 String으로 변경해주어야 했다. 이제 버튼을 누를 때마다 playerCard와 cpuCard에는 card1~ car14의 텍스트가 랜덤하게 들어갈 것이다. 시뮬레이션을 보도록 하자.

카드가 변한다~

 

현재 점수는 계속 올락간다. 이거는 다음 포스팅에서 if구문을 배워보고 진행하도록 하겠다.

 

지금까지 View코드에서 property를 사용하는 것, @State 지정하는 법, 값의 변경 가능 여부 등에 대해 알아보았다.

 

끝!