1. 조건문과 반복문의 기본 형식
- 조건문
if age > 20 {
print("성인이에요")
} else {
print("청소년이에요")
}
- 반복문
for i in 0..<100 {
print(i)
}
2. imageview의 image 바꾸기
imageView.image = UIImage(named: "ace")
전제조건 :
Assets.xcassets 폴더의 ace 라는 이름의 이미지가 미리 업로도 되어 있어야 한다.
Outlet Connection -> @IBOutlet weak var imageView: UIImageView!
3. 반복문으로 여러 개의 텍스트 필드에 텍스트 넣기
@IBOutlet var textFields: [UITextField]!
for textField in textFields {
textField.text = "모두 텍스트가 들어갑니다".
}
4. 카드 뒤집기에 Flip 애니메이션 넣기
@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
}
}
5. 여러 개의 textField를 하나의 textFields Outlet에 연결하기
@IBOutlet var textFields: [UITextField]!
여러 개의 텍스트 필드를 모두 위 textFields에 control을 누르고 끌어다 연결한다.
5. 스위치 버튼 사용해보기
@IBOutlet weak var onOffSwitch: UISwitch!
if self.onOffSwitch.isOn { ... }
6. 옵셔널 (Optional)
= 값이 채워져 있을 수도 있고, 비어 있을 수도 있다(nil). (0과 nil은 다르다)
Swift에서는 어떤 변수가 비어 있을 수도 있다면 명시적으로 해당 변수가 `Optional` 이라고 선언해 주어야 한다.
? 를 이용하여 선언할 수 있다.
var someValue: String? = "어떤 값"
요약하자면, 옵셔널은 해당 변수가 비어있을 가능성을 표현한다.
반대로 절대 nil이 될 리 없다는 표시는 !
var obviousFruit: String = someFruit.first!
실은 optional 과 non-optional 사이다.
var value: Int = 3
var valueToBeSet: Int! = 4
var valueCanBeNil: Int? = 5
value = nil // 에러!
valueToBeSet = nil // 가능
valueCanBeNil = nil // 가능
value = valueToBeSet // 가능
value = valueCanBeNil // 불가능
value = valueCanBeNil! // 가능
7. 클래스와 구조체
차이점 :
Call by value 는 구조체 (struct), 생성자 초기화를 할 필요 없음.
Call by reference 는 클래스 (class), 생성자 초기화가 필요함.
공통점 : 내부에 변수(property)와 함수(method)를 가질 수 있고, . 연산자를 통해 접근한다.
- 구조체 기본 형식
struct Work {
var task: String
var hoursToDo: Int
}
- 구조체 이용
var firstWork = Work(task: "강의자료 작성하기", hoursToDo: 3)
var secondWork = Work(task: "분리수거 하기", hoursToDo: 1)
- 클래스 기본 형식
class Student {
var name: String
var house: String
init(name: String, house: String) { // 생성자 초기화
self.name = name
self.house = house
}
}
- 클래스 이용
var joo = Student(name: "주", house: "슬리데린")
var kim = Student(name: "김", house: "그리핀도르")
8. 직사각형 버튼의 코너 둥글게 만들기
override func viewDidLoad() {
super.viewDidLoad()
timerButton.layer.cornerRadius = 10
}
9. 타이머 기능을 이용하여 타이머 만들기
var secondsLeft: Int = 10 //원래는 180초지만, 10초로 테스트 합시다
@IBAction func timerButtonClicked(_ sender: Any) {
//1초마다 타이머 반복 실행
Timer.scheduledTimer(withTimeInterval: 1, repeats: true, block: { (t) in
//남은 시간(초)에서 1초 빼기
self.secondsLeft -= 1
//남은 분
var minutes = self.secondsLeft / 60
//그러고도 남은 초
var seconds = self.secondsLeft % 60
//남은 시간(초)가 0보다 크면
if self.secondsLeft > 0 {
self.timerLabel.text = "\(minutes):\(seconds)"
} else {
self.timerLabel.text = "시간 끝!"
}
})
}
10. 타이머 양식에 맞게 숫자 표시하기
self.timerLabel.text = String(format: "%02d:%02d", minutes, seconds)
11. 타이머 멈추기
self.timer?.invalidate() // 단어 뜻 무효화하다
12. 라면타이머 전체 코드 // 세그먼트도 이용했음.
//
// ViewController.swift
// ramenTimer
//
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var timerLabel: UILabel!
@IBOutlet weak var timerButton: UIButton!
@IBOutlet weak var segment: UISegmentedControl!
var secondsLeft: Int = 180
var timer: Timer? //?는 타이머가 없을 때도 있기 때문에
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
timerButton.layer.cornerRadius = 10
self.updateTimerLabel()
}
func resetTimer() { //타이머를 종료시켜주는 함수
timer?.invalidate() //단어 뜻 무효화하다
timer = nil
timerButton.setTitle("타이머 시작하기", for: .normal)
}
func updateTimerLabel() {
var minutes = self.secondsLeft / 60
var seconds = self.secondsLeft % 60
if self.secondsLeft < 10 {
self.timerLabel.textColor = UIColor.red
}
else {
self.timerLabel.textColor = UIColor.black
}
UIView.transition(with: self.timerLabel, duration: 0.3, options: .transitionFlipFromBottom) {
if self.secondsLeft > 0 {
//self.timerLabel.text = "\(minutes):\(seconds)"
self.timerLabel.text = String(format: "%02d:%02d", minutes, seconds)
} else {
self.timerLabel.text = "시간 끝!"
}
} completion: { (animated) in
}
}
@IBAction func timerButtonClicked(_ sender: Any) {
if timer != nil {
resetTimer()
return
}
self.timerButton.setTitle("타이머 종료하기", for: .normal)
self.updateTimerLabel()
timer = Timer.scheduledTimer(withTimeInterval: 1, repeats: true) { (t) in
self.secondsLeft -= 1
self.updateTimerLabel()
if self.secondsLeft == 0 {
self.resetTimer()
}
}
}
@IBAction func segmentValueChanged(_ sender: Any) {
print(segment.selectedSegmentIndex)
if segment.selectedSegmentIndex == 0 {
self.secondsLeft = 60 * 3
self.updateTimerLabel()
} else if segment.selectedSegmentIndex == 1 {
self.secondsLeft = 60 * 4
self.updateTimerLabel()
} else if segment.selectedSegmentIndex == 2 {
self.secondsLeft = 60 * 5
self.updateTimerLabel()
}
}
}
'Practice & Study > 스파르타코딩클럽' 카테고리의 다른 글
제1회 스파르톤 생존일지 (0) | 2021.07.10 |
---|---|
iOS 앱개발 기초 1주차 : UI컴포넌트, Swift 기본 문법, Image Assets (0) | 2021.06.16 |