728x90
반응형
[강의노트] 왕초보를 위한, 한 번에 끝내는 iOS 앱 개발 바이블
https://opposite-foundation-5b5.notion.site/iOS-4b1c2a2c1baf4ae29971524e9bdfc074
[Github]
https://github.com/cafielo/fc-ios-bible-for-beginner-2022
iOS - Blank > Next > Save As: HelloSwift
01. 변수, 상수
command + /: 주석 변경
변수/상수에 커서 + option (누르면 ? 표시) + 클릭하면 타입 정보 조회 가능
import UIKit
var greeting = "Hello, playground"
// ---------- 01. 변수, 상수 ----------
// var: 변수(variable) 선언
var num = 5
num = 1
// let: 상수(constant) 선언(값 수정 불가)
var name = "Jason"
name = "Jay"
// String
let quote = "I'm mother father genius, Man"
// Integer
let num2 = 5
let otherNum = num2 + 2 // 7
let halfOfNum = otherNum / 2 // 3
// 내장함수
let num3 = 360
// 3의 배수인지 확인하는 코드
print(num3.isMultiple(of: 3))
// 0~300 사이중 랜덤으로 수를 뽑아내는 메소드
let random = Int.random(in: 0...300)
// Double: 소수점을 포함하는 숫자를 표현
let score = 3.6
02. bool-array
// ---------- 02. bool-array ----------
// Boolean
let isMan = true
let isHuman = false
var isSingle = true
isSingle.toggle()
isSingle
// String Interpolation
let difficulty = "쉽다"
let maximumAge = 80
let message = "\(maximumAge) 할머니도 배우는 iOS 개발은 \(difficulty)"
// 배열과 딕셔너리
// Array
let ages = [3, 20, 60]
let colors = ["green", "red", "yellow"]
let color = colors[0]
// Dictionary (Key: Value)
let languageCode = [
"한국" : "ko",
"미국" : "en",
"일본" : "ja",
]
// 비어 있는 배열과 딕셔너리 초기화
var emptyArr: [Int] = []
var emptyDic: [String: Any] = [:]
03. enum
// ---------- 03. enum ----------
// 서로 관계있는 값들을 모아서 표현한 것
enum WeekDay {
case mon
case tue
case wed
case thu
case fri
}
var today: WeekDay = .mon
// var tod: String = "mon" // error(mom)시 찾기 힘듦
enum MediaType {
case audio
case video
}
var mediaType: MediaType = .audio
// 위에서 만들어본 미디어 타입에, 파일 확장자도 문자열로 받을 수 있게 수정
enum MediaType2 {
case audio(String)
case video(String)
}
var mp3: MediaType2 = .audio("mp3")
var h264: MediaType2 = .video("h264")
04. 조건문, 반복문
// ---------- 04. 조건문, 반복문 ----------
let age = 10
// if문의 조건절에는 boolean 타입을 사용 (e.g. age > 20)
if age > 20 {
print("성인 입니다")
} else {
print("미성년 입니다")
}
if age >= 10 && age < 20 {
print("10대 입니다")
} else if age >= 20 && age < 30 {
print("20대 입니다")
} else if age >= 30 && age < 40 {
print("30대 입니다")
} else if age >= 40 && age < 50 {
print("40대 입니다")
} else {
print("......")
}
enum Weather {
case sun
case cloud
case rain
}
var weather: Weather = .sun
switch weather {
case .sun:
print("맑아요")
case .cloud:
print("흐려요")
case .rain:
print("비와요")
}
// 배열과 딕셔너리 아이템을 순차적으로 체크할 때 사용
let ages2 = [3, 20, 60]
let languageCode2 = [
"한국" : "ko",
"미국" : "en",
"일본" : "ja",
]
for age in ages2 {
print("age: \(age)")
}
for (key, value) in languageCode2 {
print("\(key)의 언어코드는 \(value)")
}
// 일정 횟수를 단순 반복
print("전방에 다짐 10번 발사~~!")
for _ in 0..<10 {
print("나는 iOS 개발자다!")
}
// while: 특정 조건을 이용해서 반복
var count = 10
print("Ready!")
while count > 0 {
print("\(count)...")
count -= 1
}
print("START!")
05. 옵셔널
// ---------- 05. 옵셔널 ----------
// 값이 있을수도 있고 없을수도 있음을 표현
// Dictionary (Key: Value)
let languageCode3 = [
"한국" : "ko",
"미국" : "en",
"일본" : "ja",
]
// let 상수 타입은 String? (타입 + ?)
let krCode = languageCode3["한국"] // "ko"
let jpCode = languageCode3["일본"] // "ja"
let deCode = languageCode3["독일"] // nil
// 이름이 있을 수도 있고 없을 수도 있는 타입 선언 - String?
var name2: String? = nil
name2 = "Jason"
name2 = nil
06. 함수, 클로저
// ---------- 06. 함수, 클로저 ----------
// 함수는 func 키워드를 사용해서 선언
func printGugu(dan: Int) {
for i in 1...9 {
print("\(dan) * \(i) = \(dan * i)")
}
}
printGugu(dan: 5)
func rollDice() -> Int {
return Int.random(in: 1...6)
}
let random2 = rollDice()
// 클로저: 이름이 존재하지 않는 함수
// 함수
func call(name: String) {
print("hello, \(name)")
}
call(name: "Jason")
// 상수에 함수를 할당하고, 해당 상수를 호출
let callName = call
callName("Aha")
// 상수에 클로저 할당하고, 해당 상수 호출
let helloName = { (name: String) in
print("hello, \(name)")
}
helloName("Oho")
// 클로저 형태: 함수와 거의 동일, in을 통해 파라미터 및 반환 타입과 실제 클로저 코드 분리
// { (name: String) -> Bool in ~ some code ~ }
// filter
let members = ["Jason", "Greg", "Tiffany"]
let nameHasT = members.filter { name in
return name.hasPrefix("T")
}
// map
let prices = [1000, 2000, 3000]
let doubledPrices = prices.map { price in
return price * 2
}
// reduce
let revenues = [100, 200, 300]
let totalRevenue = revenues.reduce(0) { partialResult, next in
return partialResult + next
}
07. 클래스 구조체1
// ---------- 07. 클래스 구조체1 ----------
struct Album {
// 멤버 변수들 - stored property
let title: String
let artist: String
var isReleased = false
// 생성자: 클래스 또는 구조체를 생성할 때 사용하는 특별한 함수(init 키워드로 선언)
// init(title: String, artist: String) {
// self.title = title
// self.artist = artist
// }
func description() -> String {
return "\(title) by \(artist)"
}
// 구조체 내부 멤버 변수의 값을 변경하는 경우, mutating 키워드 이용
mutating func release() {
self.isReleased = true
}
}
var easyOnMe = Album(title: "Easy On Me", artist: "Adele")
print(easyOnMe.description())
print(easyOnMe.isReleased)
easyOnMe.release()
print(easyOnMe.isReleased)
// 클래스: 상속 가능 참조(reference) 생성자를 기본으로 만들어주지 않음
// 구조체: 상속 불가능 복사(copy)
class Employee {
var name: String
var hours: Int
init(name: String, hours: Int) {
self.name = name
self.hours = hours
}
func work() {
print("I'm working now...")
}
func summary() {
print("I work \(self.hours) hours a day. ")
}
}
class iOSDeveloper: Employee {
override func work() {
print("I'm developing iOS app now.")
}
override func summary() {
print("I work \(self.hours/2) hours a day.")
}
}
struct Phone {
var modelName: String
var manufacturer: String
var version: Double = 1.0
}
let normalWorker = Employee(name: "Kim", hours: 8)
normalWorker.work()
normalWorker.summary()
// I'm working now...
// I work 8 hours a day.
let developer = iOSDeveloper(name: "Jason", hours: 8)
developer.work()
developer.summary()
// I'm developing iOS app now.
// I work 4 hours a day.
// Reference vs. Copy
var iPhone1 = Phone(modelName: "iPhone 13", manufacturer: "Apple")
var iPhone2 = iPhone1
iPhone2.modelName = "iPhone 14"
print(iPhone2.modelName)
print(iPhone1.modelName)
// iPhone 14
// iPhone 13
var jrDeveloper1 = iOSDeveloper(name: "John", hours: 8)
var jrDeveloper2 = jrDeveloper1
jrDeveloper1.name = "Billy"
print(jrDeveloper1.name)
print(jrDeveloper2.name)
// Billy
// Billy
08. 클래스 구조체2
// ---------- 08. 클래스 구조체2 ----------
// stored property: 클래스, 구조체가 값을 저장하고 있는 프로퍼티
// computed property: 따로 값 저장하지 않음, stored property를 활용학거나 특정값을 전달할 때 사용하는 프로퍼티
struct Watch {
let model: String
let manufacturer: String
var description: String {
return "\(model) by \(manufacturer)"
}
}
struct Person {
let firstName: String
let lastName: String
var fullName: String {
return "\(firstName) \(lastName)"
}
}
let appleWatch = Watch(model: "Watch 7", manufacturer: "Apple")
print(appleWatch.description)
// Watch 7 by Apple
let jason = Person(firstName: "Jason", lastName: "Lee")
print(jason.fullName)
// Jason Lee
09. 프로토콜
// ---------- 09. 프로토콜 ----------
// 제공하고 싶은 역할(기능, 속성)을 미리 정의해 놓은 것
// 이후에 다른 타입이 해당 프로토콜의 역할을 제공하고 싶으면, conform해서 제공함
protocol Coach {
var name: String { get set }
var currentTeam: String { get }
func training()
func direct()
}
struct Mourinho: Coach {
var name: String = "Jose Mourinho"
var currentTeam: String = "AS Roma"
func training() {
print("Traing Player")
}
func direct() {
print("Direct Game")
}
}
let mourinho = Mourinho()
print("\(mourinho.name), \( mourinho.currentTeam)")
mourinho.training()
mourinho.direct()
// Jose Mourinho, AS Roma
// Traing Player
// Direct Game
10. 익스텐션
// ---------- 10. 익스텐션 ----------
// 기존 타입에 새로운 역할(기능 및 속성)을 추가하고 싶을 때 사용
extension String {
func contains(s: String) -> Bool {
return self.range(of: s) != nil
}
func replace(target: String, with: String) -> String {
return self.replacingOccurrences(of: target, with: with)
}
}
let testString = "Hello iOS Developer!!"
let replaced = testString.replace(target: "Hello", with: "안녕하세요")
print(replaced)
// 안녕하세요 iOS Developer!!
print(testString.contains(s: "iOS"))
// true
11. 앞으로 스위프트 공부방향
swift language apple
https://developer.apple.com/kr/swift/
swift language guide
https://docs.swift.org/swift-book/LanguageGuide/TheBasics.html
[Next] (2주차) 실습
2022.06.26 - [Swift] - [Xcode] iOS Swift 앱 개발 Byte Degree - week.02
728x90
728x90
'Development > Swift' 카테고리의 다른 글
[Swift] iOS 앱 개발(Xcode) Byte Degree - week.06 (0) | 2022.07.22 |
---|---|
[Swift] iOS 앱 개발(Xcode) Byte Degree - week.05 (0) | 2022.07.16 |
[Swift] iOS 앱 개발(Xcode) Byte Degree - week.04 (0) | 2022.07.10 |
[Swift] iOS 앱 개발(Xcode) Byte Degree - week.03 (0) | 2022.07.01 |
[Swift] iOS 앱 개발(Xcode) Byte Degree - week.02 (0) | 2022.06.26 |