3/ 18
* Pow: ์ ๊ณฑ
Sqrt: ๋ฃจํธ
* ํ๋๋ int ํ๋๋ double ์ด๋ฉด ๊ณฑ์ ์์ผ๋ก ๋์ ๊ณฑํ ๋ ์๋ก ๋ฌ๋ผ์ ์๋ฌ๊ฐ ๋จ. ๊ทธ๋ด ๋๋ ํ๋๋ฅผ ๋ค๋ฅธ ํ๋์ ๋ง์ถฐ์ฃผ๋ฉด ๋๋๋ฐ, ์๋ฅผ ๋ค์ด Dluble(๋ณ์๋ช ) ์ด๋ฐ์์ผ๋ก ๋ฐ๊ฟ์ฃผ๋ฉด ๋จ.
์ฒ์์ผ๋ก Coursera ์์ swift ๊ฐ์๋ฅผ ๋ค์๋ค. ์์ง์ ์์ ๊ธฐ์ด๋จ๊ณ๋ผ ์ง๋๊ฐ ์ฝ๊ฒ ์ฝ๊ฒ ๋์ด๊ฐ๋ค. ์ธ์ด๊ฐ ๋ฌ๋ผ๋ ํ๋ก๊ทธ๋จ์ด ์๋ํ๋ ๋ฐฉ์์ ํฌ๊ฒ ๋ค๋ฅด์ง ์๋ค๋ ๊ฑธ ๋ชธ์ ์ค๊ฐํ๋ค.
3/19
var students = [String]() // initialize
var studentsList2: [string] // declare
students.append("John Adams")
print(students)
=> initialize ๋ ๋น ๋ฐฐ์ด์ ๋ง๋๋ ๊ฒ์ด์ง๋ง declare์ ๋จ์ ๋ณ์ ์ ์ธ
donutslist.insert("kiwi", at: 0)
donutsquantity.insert(0, at: 0)
=> ๋ฐฐ์ด ๊ฐ์ฅ ์์ ์์ ์ถ๊ฐํ ๋ insert(at:) ์ฌ์ฉํจ
for i in 0..<salaries.count {
salaries[i] = salaries[i] + (salaries[i] * 0.10)
}
=> 0.. ์ 0๋ถํฐ ์์ํจ์ ์๋ฏธํจ
Failed to prepare for communication with playground for an unknown reason
=> xcode ์์ ์ด ์ค๋ฅ๊ฐ ๋จ๋ฉด xcode ์ข ๋ฃ ํ ๋ค์ ์คํํ๋ฉด ํด๊ฒฐ๋๋ค.
์ค๋์ swift์ ๋ฐฐ์ด๊ณผ ๋ฃจํ์ ๋ํด์ ๋ฐฐ์ ๋ค. ์ด ๋ํ ๋ด๊ฐ ์ด๋ฏธ ๊ณต๋ถํ๋ javascript์ ํฌ๊ฒ ๋ค๋ฅด์ง ์์ ์์ํ๊ฒ ๊ณต๋ถํ๋ค.
3/21
struct Person {
let firstName: String
let middleName: String?
let lastName: String
func printFullName() {
// if middleName is nil use an empty string
let middle = middleName ?? ""
/*
if middleName == nil {
middle = ""
*/
print("\(firstName) \(middle) \(lastName)")
}
}
var person1 = Person(firstName: "Jenna", middleName: nil, lastName: "Smith")
var person2 = Person(firstName: "Bob", middleName: "Leroy", lastName: "Jenkins")
person1.printFullName()
person2.printFullName()
* ์๋ก ์๊ฒ ๋ ๊ฐ๋
=> String? : String ์ผ์๋ nil ์ผ์๋ ์์ผ๋ nil์ ๊ฒฝ์ฐ์ ์๋ ์์ง ๋ง๊ณ ์ฒดํฌํด์ผ ํ๋ค.
class Person {
let firstName: String
let middleName: String?
let lastName: String
let spouse: Person?
init(firstName: String, middleName: String?, lastName: String, spouse: Person?) {
self.firstName = firstName
self.middleName = middleName
self.lastName = lastName
self.spouse = spouse
}
func getFullName() -> String {
let middle = middleName ?? "NA"
return "\(firstName) \(middle) \(lastName)"
}
}
let person = Person(firstName: "kimbo", middleName: "Joe", lastName: "Slice", spouse: nil)
if let spouseName = person.spouse?.getFullName() {
print(spouseName)
} else {
print("\(person.firstName) does not have a spouse")
}
// ์ค์ํ๊ฒ ์๊ฐํด์ผ ํ 3๊ฐ์ง
//1. If you have an optional (The Question Mark ?), make sure to check if it is nil
//2. Always use optional chaining
//3. Never force optionals, or you will get run time crashes.
์ค๋์ optional ์ด๋ผ๋ ์์ํ ๊ฐ๋ ์ ๋ฐฐ์ ๋ค. ?๋ผ๋ ๊ธฐํธ๋ก ์ฌ์ฉํ๊ณ nil์ด๋ผ๋ ๊ฒฝ์ฐ์ ์ ๋ํ ๋ฐ์ ธ์ผ ํ๋ ์ ๊ธฐํ ๊ฐ๋ ์ด์๋ค. ์ฒ์์๋ ์ด๋ฅผ ์ดํดํ๋ ๋ฐ์ ์ด๋ ค์์ ๋๊ปด ํ๊ตญ์ด๋ก optional ๊ฐ๋ ์ ๋ํ ๋ธ๋ก๊ทธ๋ฅผ ์ฝ๊ณ ๋ค์ ๊ฐ์๋ฅผ ์ฒญ์ทจํ๋ ์กฐ๊ธ์ฉ ์ดํด๊ฐ ๋๊ธฐ ์์ํ๋ค. ์ฌ์ค ๊ทธ๋๋ ์์ง optional์ ๋ํ ์ดํด๊ฐ ์๋ฒฝํ์ง๋ ์๋ค. ๊ทธ๋๋ ์ด ๊ฐ๋ ์ ํฐ ํ์ ์ดํดํ๊ฒ ๋ ๊ฒ ๊ฐ์ ๋ฟ๋ฏํ๋ค.
3/22
- Objects and Classes (๊ฐ์ฒด์ ํด๋์ค)
class Vehicle {
// ์์ฑ, ๋ฐ์ดํฐ, ์ํ
var tires = 4
var headlight = 2
var horsepower = 468
var model = ""
// ํ์, ๋ฉ์๋, ๋์
func drive(){
//accelerate the vehicle
}
func brake() {
}
}
// ํ๋์ ํจ์๋ก ๋ค์ํ ๊ฐ์ฒด ๋ง๋ค ์ ์์
let bmw = Vehicle()
bmw.model = "328i"
let ford = Vehicle()
ford.model = "F150"
ford.brake()
func passByReference (vehicle: Vehicle) {
vehicle.model = "Cheese"
}
print(ford.model) // output: "F150" , Pass by value(ํจ์ ํธ์ถ ์์ ๋งค๊ฐ๋ณ์์ ๊ฐ์ ๋ณต์ฌํ์ฌ ์ ๋ฌํ๋ค)
passByReference(vehicle: ford) //Pass by reference(์ธ์๋ก ๋ฐ์ ๊ฐ์ ๋ฐ๊พธ๋ฉด ๋ฐ๊นฅ์ ๊ฐ๋ ๋ฐ๋๋ค)
print(ford.model) // "Cheese"
=> class์๋ ์์ฑ, ๋ฐ์ดํฐ, ์ํ๋ฅผ ๋ํ๋ด๋ ๋ถ๋ถ๊ณผ ํ์, ๋ฉ์๋, ๋์์ ๋ํ๋ด๋ ๋ถ๋ถ์ผ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ฅผ ๋ฐํ์ผ๋ก ์ฌ๋ฌ ๊ฐ์ง ๊ฐ์ฒด๋ฅผ ๋ง๋ค ์ ์๋ค.
* Pass by value : ํจ์ ํธ์ถ ์์ ๋งค๊ฐ ๋ณ์์ ๊ฐ์ ๋ณต์ฌํ์ฌ ์ ๋ฌํจ
* Pass by reference: ์ธ์๋ก ๋ฐ์ ๊ฐ์ ๋ฐ๊พธ๋ฉด ๋ฐ๊นฅ์ ๊ฐ๋ ๋ฐ๋
+ ์ฐธ๊ณ ํ๋ฉด ์ข์ ๋ธ๋ก๊ทธ (swift์์์ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ)
https://jinshine.github.io/2018/05/22/Swift/5.OOP%20in%20Swift/
var someonesAge = 20
func passByValue(age: Int) {
let newAge = age
}
passByValue(age: someonesAge) // ๋์ํ์ง ์์
// int์ double ๊ฐ์ value๋ ๋ณต์ฌ๊ฐ ๊ฐ๋ฅํ์ง๋ง ๊ฐ์ฒด๋ ๋ณต์ฌํ ์ ์๋ค.
- Inheritance (์์)
class Vehicle {
var tires = 4
var make: String?
var model: String?
var currentSpeed: Double = 0
init() {
print("I am the Parent")
}
func drive(speedIncrease: Double){
currentSpeed += speedIncrease * 2
}
func brake(){
}
}
// ์ฌ๋ฌ ๊ฐ์ ๊ฐ์ฒด๋ฅผ ์ด๋ ๊ฒ ๋ฐ๋ก ์ง์ ํ ์ ์์
class SportsCar: Vehicle {
// override: ์ฌ์ ์
// initialization: ์ด๊ธฐํ
// intializers: ํน์ ํ์
์ ์๋ก์ด ์ธ์คํด์ค๋ฅผ ๋ง๋ค๊ธฐ ์ํด ํธ์ถํ๋ฉฐ, ์ธ์๊ฐ ์๋ ์ธ์คํด์ค ๋ฉ์๋์ ์ ์ฌํ ํ์
// override init: ์๋ธํด๋์ฑ์, ์ํผ ํด๋์ค์ ๊ฐ์ ์ด๊ธฐํ ์ด๋ฆ์ผ๋ก ํ ๋ ์ฌ์ฉ(๋ถ๋ชจ ํด๋์ค์ ๋ค๋ฅธ ๋ฉ์๋)
override init(){
// super.init(): ์ฐ์์ ์ธ ์ด๊ธฐํ
super.init()
print("I am the child")
make = "BMW"
model = "3 series"
}
override func drive(speedIncrease: Double) {
currentSpeed += speedIncrease * 3
}
}
let car = SportsCar()
=> ์์์ '์์: ๋ถ๋ชจ' ํํ๋ก ๋ํ๋ด๋ฉฐ ์ด๋ฅผ ์ด์ฉํ์ฌ ๊ฐ์ฒด๋ฅผ ๋ง๋ค ์ ์์ผ๋ฉฐ ์ฌ์ ์์ ์ด๊ธฐํ๋ฅผ ์ด์ฉํ์ฌ ๋ถ๋ชจ ํด๋์ค์ ๋ค๋ฅธ ๋ฉ์๋๋ฅผ ๋ง๋ค ์ ์๋ค.
- Polymorphism (๋คํ์ฑ)
: polymorphicํ ์์คํ ์ ๊ฒฝ์ฐ ๋ฒ์ฉ์ ์ธ ๋ฉ์๋ ์ด๋ฆ์ ์ ์ํ์ฌ ํํ์ ๋ฐ๋ผ ์ ์ ํ ๋ณํ ๋ฐฉ์์ ์ ์ํด ๋ ์ ์๋ค.
class Shape {
var area: Double?
func calculateArea(valA: Double, valB: Double){
}
}
class Triangle: Shape {
override func calculateArea(valA: Double, valB: Double) {
area = (valA * valB) / 2
}
}
class Rectangle: Shape {
override func calculateArea(valA: Double, valB: Double) {
area = valA * valB
}
}
=> ์์์ ์ด์ฉํ๋ฉด ์ฝ๋๋ฅผ ์ข ๋ ๊น๋ํ๊ฒ ์์ฑํ ์ ์๋ค.
- MVC (Model - View - Controller)
=> Model layer: ์ฒญ์ฌ์ง
=> View layer: ์คํฌ๋ฆฐ์์ ์ด๋ป๊ฒ ๋ณด์ผ์ง (watchface)
=> Controller layer: view๋ฅผ ์กฐ์ข (watchmaker)
* xcode - ํ๋ก์ ํธ ์งํํ๋ฉด์ ์ฐพ๊ธฐ ํ๋ค์๋ ๋ถ๋ถ ์ ๋ฆฌ
- view > Show Library : Object Library
- Embed in View : Storyboard ๊ฐ์ฅ ํ๋จ ์ค๋ฅธ์ชฝ์ ์๋ ์์ด์ฝ
- Editer > Assistant > Ctrl + ๋ง์ฐ์ค์ผ์ชฝ : ์ฝ๋ ์ฐ๊ฒฐ ๊ฐ๋ฅ (์ค๋ฅ ๋๋ ๊ฒฝ์ฐ xcode ์ข ๋ฃ ํ ๋ค์ ์คํ)
์์ดํฐ์ ๊ฐ๋จํ ๋ฐ์ค์ ํ ์คํธ ๋์ฐ๋ ํ๋ก์ ํธ
์ค๋์ swift์์์ ๊ฐ์ฒด์ ๋ํ ์ดํด์ ๋๋ถ์ด ์์๊ณผ ๋คํ์ฑ๊ณผ ๊ฐ์ swift๊ฐ ๊ฐ์ง๊ณ ์๋ ๋ํ์ ์ธ ํน์ง์ ๋ํด ์์๋ณด์๋ค. ํ๋ก ํธ์๋ ๊ณต๋ถ๋ฅผ ํ๋ฉด์๋ ๊ฐ์ฒด ์ ๋ํ ์ดํด๊ฐ ์ ๋์ง ์์๋๋ฐ, ๋ค๋ฅธ ๊ฑด ๋ชฐ๋ผ๋ ์ค๋ ๊ฐ์ฒด์ ๋ํด์ ์๋ฒฝํ๊ฒ ์ดํดํ๊ฒ ๋ ๊ฑฐ ๊ฐ์ ๋ฟ๋ฏํ๋ค. ๋ ์ง์ xcode์ ์์ดํฐ์ ๋์ฐ๋ ํ ์คํธ์ ๋ฐ์ค๋ฅผ ๋ง๋ค์ด๋ณด๋ฉด์ application์ด ์ด๋ป๊ฒ ์๋ํ๊ณ ๋ง๋ค์ด์ง๋์ง ์๊ฒ ๋์๊ณ MVC๋ผ๋ ์ค์ํ ํน์ง๋ ์๊ฒ ๋์ด ๊ฐ ๋ถ๋ถ์ด ์ด๋ค ์ญํ ์ ํ๋์ง์ ๋ํด์๋ ์๊ฒ ๋์๋ค. ์ฒ์์ผ๋ก ํ๋ก์ ํธ๋ฅผ ์งํํ๊ณ , swift์ ๋ํด ๋ฐฐ์๊ฐ๋ฉด์ ์ด๋ ค์ ๋ ๋ถ๋ถ๋ ์์๊ณ ์์ง ์กฐ๊ธ ์๋ฆฌ๊น๋ฆฌํ ๋ถ๋ถ๋ ์์ง๋ง ์ด๋ฒ ๊ฐ์๋ฅผ ํตํด swift์ ๋ํ ์ ์ฒด์ ์ธ ํ์ ๋ฐฐ์ธ ์ ์์๋ค๋ ๊ฑด ์ ๋ง ์ข์๋ค.
'iOS > Swift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ARC ์์๋ณด๊ธฐ (0) | 2024.07.06 |
---|---|
Struct / Class ๋ ๋ฌด์์ธ๊ฐ? (1) | 2024.04.25 |
Design Pattern in Swift [ ์์ฑ ํจํด ] (0) | 2023.04.17 |
[Swift] ์ด๋ฏธ์ง๋ฅผ ์ํ ์ด๋ฏธ์ง๋ก ๋ณ๊ฒฝํ๊ณ ํ ๋๋ฆฌ ์ค์ ํ๋ ๋ฐฉ๋ฒ (0) | 2022.07.05 |
[1day - 6day TIL] 100 days of swift (0) | 2022.04.30 |