< 1. Introduction to iOS 11, Xcode 9 and Swift 4 >
객체 지향이고 C 기반이다.
총 4개의 레이어로 이루어져있다.
concentration 게임 :
카드 뒤집기 게임이다. 같은 쌍을 찾기 위해서 여러 카드를 뒤집는다. 뒤집기를 반복하며 카드를 기억해서 효율적으로 짝을 맞추는 것, 이것이 앱 빌딩과 유사하다!
Xcode project 생성
IOS에서 Single View App 생성
가장 간단하기 때문이다!
화면의 왼쪽은 Navigator 라고 불린다.
오른쪽은 Utility pane 이라고 불린다.
그리고 기기를 정해서 어느 환경에서 실행될 것 인가를 골라야 한다.
LaunchScreen.storyboard를 들어간다.
처음 UI는 하나의 기기에만 잘 적용되게 할 것이다. 방향이나 기기 마다 제약이 다르다.
이미지 / 누르면 나타나는 것 두 개가 필요하다.
“+” 를 눌러서 “Button”을 검색 후 인터페이스에 옮겨 넣는다.
파란색 선으로 위치를 자세히 나타내준다!
“버튼”을 누르고 유틸리티에 가면 background 색상을 변경할 수 있다.
아예 인터페이스 배경 색상을 바꿀 수도 있다!
카드를 열면 이미지가 있고 흰색 배경으로 바뀌도록 하자!
Edit > Emoji&Symbol에 들어가서 이미지 대신 이모티콘으로 대신하자
class가 UI를 다 통제한다.
창을 두 개를 띄워서 인터페이스에서 ctrl + 드래그 해서 코드에 갖다놓으면 인스턴스를 생성할 수 있다.
var flipCount = 0 {
// property observer
didSet {
flipCountLabel.text = "Flips : \(flipCount)"
}
}
flip count 추가해서 flipCountLabel 함수의 텍스트 print 문에 /(flipCount)를 넣어주면 뒤집는 만큼 숫자가 추가 된다!
Type을 Any에서 UIButton으로 바꿔주자.
// 함수이고 인스턴스의 이름 :은 타입을 말해줌
// 파라미터는 이름이 다 있어야 한다.
옵션키를 누르고 함수를 클릭하면 help가 뜬다
인터페이스에서 버튼을 우 클릭하면 disconnect 할 수 있다. 복붙했을 때 자주 발생하는 문제
connection : outlet은 instance variable property를 생성한다 / action은 method를 생성한다outlet collection은 Array
could not insert new outlet connection 오류가 뜨면 프로젝트 껐다 키기
command 누르고 함수 누르면 새로운 창이 뜸
rename하면 전체에서 기존의 문자를 원하는 문자로 바꿔준다.
nil은 optional이 아니라는 것
cardButton이 아닌 것을 누르면 crash 발생
전체 코드는 다음과 같다.
//
// ViewController.swift
// stanford swift
//
// Created by 이차민 on 11/11/2019.
// Copyright © 2019 이차민. All rights reserved.
//
import UIKit
class ViewController: UIViewController {
// initializer를 필요로 함 ( = 0 )
// swift는 타입추론이 가능하다
// 그래서 Int = 0 이라고 안적어도 된다.
var flipCount = 0 {
// property observer
didSet {
flipCountLabel.text = "Flips : \(flipCount)"
}
}
// 초기화가 필요없음
@IBOutlet weak var flipCountLabel: UILabel!
// Array<UIButton>!
@IBOutlet var cardButtons: [UIButton]!
// string이 확실해서 array<String> 안써도 됨
var emojiChoices = ["🎃","👻","🎃","👻"]
@IBAction func touchCard(_ sender: UIButton) {
flipCount += 1
if let cardNumber = cardButtons.index(of: sender){
flipCard(withEmoji: emojiChoices[cardNumber], on: sender)
} else{
print("Chosen card was not in cardButtons")
}
}
func flipCard(withEmoji emoji : String, on button : UIButton) {
print("flipCard(withEmoji: \(emoji)") // \() sting이 들어갈 수 있음
if button.currentTitle == emoji {
button.setTitle("", for: UIControl.State.normal)
button.backgroundColor = colorLiteral(red: 0.9372549057, green: 0.3490196168, blue: 0.1921568662, alpha: 1)
} else {
button.setTitle(emoji, for: UIControl.State.normal)
button.backgroundColor = colorLiteral(red: 1, green: 1, blue: 1, alpha: 1)
}
}
}
결과는 아래와 같다.
Flip도 세주고 뒤집었을 때 이미지가 등장한다.
강의를 들으면서 적고/따라하다보니 정리가 난잡하다...
코드도 지우고 새로 추가하는 부분들이 있어서 강의를 들으면서 천천히 따라하는 것이 제일 좋을 것 같다!