티스토리 뷰
간단하게 2주 차는,
- Swift 기본 문법 - 조건문, 반복문
- UI 컴포넌트로 연습 (포커 앱)
- Swift 심화 문법 - 옵셔널, 클래스, 구조체
- 타이머 앱
Swift 기본 문법 - 조건문, 반복문
var age = 30
if age > 20 {
print("성인")
} else {
print("청소년")
}
var fruitName = "사과"
if fruitName == "사과" {
print("사과가 최고지")
} else if fruitName == "딸기" {
print("딸기는 논산 딸기")
} else if fruitName == "수박" {
print("여름은 역시 수박!")
} else {
print("다른 과일들도 많지요~")
}
switch fruitName{
case "사과":
print("사과가 최고지")
case "딸기":
print("딸기는 논산 딸기")
default:
print("다른 과일도 많지요~")
}
for i in 0..<100 {
print(i)
}
for i in 0...100 {
print(i)
}
var people = ["gildong","euna"]
for person in people{
print(person)
}
for i in 0..<people.count{
let person = people[i]
print(person)
}
포커 카드 뒤집기 앱
isBackSide는 뒤집힌 상태를 저장하는 변수이다. '뒤집힌 상태에 따라 이미지를 넣어준다.
1주 차에서 시스템에서 제공하는 이미지로 바꿀 때는,
UIImage(systemName: "flashlight.on.fill")
2주 차에서는 가져온 이미지로 바꿀 때는,
UIImage(named: "ace")
버튼을 눌렀을 때 카드 뒤집는 애니메이션 없이, 뒤집도록 하는 버전이다.
var isBackSide = true
@IBAction func buttonDidClick(_ sender: Any) {
if isBackSide {
imageView.image = UIImage(named: "ace")
} else {
imageView.image = UIImage(named: "poker")
}
isBackSide = !isBackSide
}
애니메이션 UIView.transition()을 썼다.
가져오면 두 번째 사진처럼 무엇을 써주어야 할지 다 나타나기 때문에 편리하다.
options에서 transitionFilopFromLeft인데 왼쪽에서 오른쪽으로 뒤집히는 애니메이션이 나타나게 된다.
var isBackSide = true
@IBAction func buttonDidClick(_ sender: Any) {
UIView.transition(with: imageView, duration: 0.6, options: .transitionFlipFromLeft) {
if self.isBackSide {
self.imageView.image = UIImage(named: "ace")
} else {
self.imageView.image = UIImage(named: "poker")
}
} completion: { (finished) in
self.isBackSide = !self.isBackSide
}
}
switch를 통해, 카드를 뒤집는 것도 위와 유사하다. switchDidClick() 액션 함수 참고하면 된다.
Swift 심화 문법 - 옵셔널, 구조체, 클래스
// 구조체
struct Work {
var task: String
var hoursToDo: Int
func alert(){
print("\(self.task)가 앞으로 \(self.hoursToDo) 시간 더 해야 합니다.")
}
}
var firstWork = Work(task: "코딩하기", hoursToDo: 3)
var secondWork = Work(task: "운동하기", hoursToDo: 2)
firstWork.alert()
// 클래스
class Student {
var name: String
var home: String
init(name: String, house: String){
self.name = name
self.home = house
}
func introduce(){
print("\(home) 기숙사에 사는 \(name)입니다.")
}
}
var lee = Student(name: "gildong", house: "seoul")
lee.introduce()
optional은?로 나타난다.
의미는 이 변수에는 값이 들어갈 수 도 있고, 아닐 수도 있다(nil)라는 뜻이다. (우리가 흔히 아는 null 개념이다.)
swift에서는 어떤 변수가 비어있을 수 도 있다면 명시적으로 변수가 'optional'이라고 선언해 주어야 한다.
변수 뒤에? 대신! 가 붙은 경우도 종종 있다.
! 는 optional과 non-optional 사이라고 한다. 변수를 선언한 직후 대부분은 값을 바로 넣기 때문에! 는 변수가 nil일 확률이 매우 작은 경우에 사용한다고 한다.
var someValue : String? = "안녕하세요"
someValue = nill
someValue = "안녕"
var anotherValue: String = "또 안녕하세요"
anotherValue = "또 안녕"
anotherValue = nil // error가 난다.
타이머 앱
segment control을 사용해서 3분, 4분, 5분을 선택하면 배경 색깔이 바뀌고 해당 시간의 타이머가 실행된다. 멈추면 00:00으로 리셋된다. 시간이 60초 미만으로 남았을 시, 글씨 색이 빨간색으로 변한다. transition에서 transitionFlipFromBottom 사용해서 애니메이션을 추가했다.
//
// ViewController.swift
// RamenApp
//
// Created by LeeEunAh on 2022/01/21.
//
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var timerLabel: UILabel!
@IBOutlet weak var timerButton: UIButton!
@IBOutlet weak var segmentControl: UISegmentedControl!
override func viewDidLoad() {
super.viewDidLoad()
timerButton.layer.cornerRadius = 10
// Do any additional setup after loading the view.
}
var secondsLeft : Int = 180
var timer : Timer?
@IBAction func timerButtonClicked(_ sender: Any) {
if timer != nil {
self.resetTimer()
self.timerButton.setTitle("타이머 시작하기", for: .normal)
return
}
self.timerButton.setTitle("타이머 종료하기", for: .normal)
self.timer = Timer.scheduledTimer(withTimeInterval: 1, repeats: true, block: ({ (t) in
self.secondsLeft -= 1
self.updateSecondsLabel()
if self.secondsLeft == 0 {
self.resetTimer()
}
}) )
}
@IBAction func segmentValueChanged(_ sender: Any) {
let option: Int = segmentControl.selectedSegmentIndex
switch(option){
case 1:
secondsLeft = 240
view.backgroundColor = UIColor.systemMint
case 2:
secondsLeft = 300
view.backgroundColor = UIColor.systemYellow
default:
secondsLeft = 180
view.backgroundColor = UIColor.systemGreen
}
self.resetTimer()
}
func updateSecondsLabel() {
let minutes = self.secondsLeft / 60
let seconds = self.secondsLeft % 60
if self.secondsLeft < 60 {
self.timerLabel.textColor = UIColor(red: 0.94, green: 0.07, blue: 0.07, alpha: 1.00)
} else {
self.timerLabel.textColor = UIColor.black
}
UIView.transition(with: self.timerLabel, duration: 0.3, options: .transitionFlipFromBottom) {
if self.secondsLeft > 0 {
self.timerLabel.text = String(format: "%02d:%02d", minutes, seconds)
} else {
self.timerLabel.text = "시간 끝"
}
} completion: { animated in
}
}
func resetTimer() {
self.timer?.invalidate()
self.timer = nil
self.timerLabel.textColor = UIColor.black
self.timerLabel.text = "00:00"
self.timerButton.setTitle("타이머 시작하기", for: .normal)
}
}
참고 자료
https://developer.apple.com/documentation/foundation/timer/2091889-scheduledtimer
https://spartacodingclub.kr/online/ios
학습을 하면서, Swift가 새삼 친절한 언어라는 것을 느꼈다. transition과 scheduledTimer에서 속성들의 값들을 다 알아서 불러와 주고 탭만 하면 채울 수 있어 편리했다. 또, 에러나 경고가 있을 시에 바로 표시를 해줘서 무엇이 문제인지 파악하기 편리했다. 뭔가 어느 정도 다른 언어로 개발을 했던 사람들이라면 어렵게 처음을 시작할 수 있는 것 같다. 아직 깊은 부분까지 다루지 않아 이렇게 말하는 것 일수도 있다. ㅎㅎ 3주 차부터 여러 스크린을 다루게 된다고 강사님이 말씀하신 것 같은데 기대가 된다.
'study > iOS' 카테고리의 다른 글
iOS 앱개발 기초반 3주차 복습 (0) | 2022.02.10 |
---|---|
iOS 앱개발 기초반 1주차 복습 (0) | 2022.01.22 |
- Total
- Today
- Yesterday
- 개발자멘토
- DOIT
- iOS 앱개발 기초반
- 1시간만에끝내는직장인코딩용어해설
- 내일배움단
- 스파르타코딩클럽
- 타입확장하기
- ios앱개발
- 코딩교육
- 크롤링
- 스파르타코딩클럽후기
- 르탄즈1기
- 공부하자...
- 타입스크립트파일
- 내일배움카드
- mongodb
- homebrew
- 타입활용
- 웹 스크래핑
- IOS
- 아이디어
- 스파르타 코딩클럽
- 스파르타코딩클럽 #비전공자코딩 #아이디어 #개발자멘토 #르탄즈 1기
- 비전공자코딩
- javascript
- 타입스크립트
- 개발일지
- 코딩
- 우아한타입스크립트
- Selenium
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |