Skip to content

yenoss/swiftABC

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

27 Commits
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Swift ABC Doc

Apple "The Swift Programming Language (Swift 3.0.1)" ์–ธ์–ด ๋ฌธ์„œ๋ฅผ ๊ณต๋ถ€ํ•ฉ๋‹ˆ๋‹ค.

#####๋ชฉํ‘œ

  • Daily Commit.

  • ์–ธ์–ด ๊ธฐ๋ณธ์‚ฌ์šฉ์— ์ต์ˆ™ํ•ด์ง€๊ธฐ.

  • ์–ธ์–ด์  ๊ธฐ๋ณธ์‚ฌ์šฉ์— ์ต์ˆ™ํ•ด์ง€๊ธฐ.

Day 1


###๊ธฐ๋ณธ.. - ์„ธ๋ฏธ์ฝœ๋ก  ๋” ์ด์ƒ ํ•„์š”ํ•˜์ง€ ์•Š๋‹ค. - constnat value ์ธ let์€ ๊ผญ 1๋ฒˆ๋งŒ ์„ ์–ธํ•ด์•ผํ•œ๋‹ค.(ํ•œ๋ฒˆ์„ ์–ธํ•˜๊ณ  ๋งŽ์€๊ณณ์—์„œ ์‚ฌ์šฉํ• ๋•Œ) - ํƒ€์ž…์€ ์ดˆ๊ธฐ init์ผ๋–„์˜ ๊ฐ’์œผ๋กœ ๊ธฐ์–ตํ•œ๋‹ค. - value๋Š” ์ ˆ๋Œ€๋กœ ์€์—ฐ์ค‘ ๋‹ค๋ฅธํƒ€์ž…์œผ๋กœ ๋ณ€ํ•˜์ง€ ์•Š๋Š”๋‹ค. (์ฆ‰ ํ•œ๋ฒˆ์„ ์–ธํ•˜๋ฉด ๊ณ„์† ๊ทธํƒ€์ž…์œผ๋กœ ๊ฐ€์ง„๋‹ค๋Š”์ด์•ผ๊ธฐ) - ํ•ด์„œ String(value)๋“ฑ์œผ- ๋กœ value๋ฅผ ํ˜•๋ณ€ํ™˜ํ•ด์ฃผ์•ผํ•œ๋‹ค. - ์ŠคํŠธ๋ง ๋‚ด๋ถ€์—์„œ ์“ธ๋•Œ ๋ฐฑ์Šฌ๋ž˜์‹œ๋ฅผ ํ†ตํ•ด ํƒ€์ž…์„ ์ŠคํŠธ๋งํ™”ํ• ์ˆ˜์žˆ๋‹ค.\(value

###array,dictionary..

  • array,dictionaryํƒ€์ž…์€ bracket์„ ์“ด๋‹ค
  • String, String:Float ์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•˜๊ณ  ๊ธฐ์กด ๊ฒƒ์€ [], [:] ์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค
  • a ?? b ๋Š” a๊ฐ€ ์˜ต์…”๋„๋ฐธ๋ฅ˜์ด๊ณ  null์ด๋˜๊ฒŒ๋˜๋ฉด b๊ฐ€ default๋กœ ๋“ค์–ด๊ฐ„๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.
  • optionalValue์€ nill์ด ๋“ค์–ด ๊ฐˆ ์ˆ˜ ์žˆ๋Š” value ์ด๊ณ  ํ•ด๋‹น nil์—๋Œ€ํ•ด ๋Ÿฐํƒ€์ž„์—๋Ÿฌ๋ฅผ ์‚ฌ์ „์— ์ปดํŒŒ์ผ์—๋Ÿฌ๋กœ ๋ฐฉ์ง€ํ•˜๊ธฐ์œ„ํ•จ์ด๋‹ค. (swift๊ฐ€ type safeํ•œ ์–ธ์–ด์ธ ์ด์œ )

###Loop..

  • for i in 0..<4 0~3๊นŒ์ง€.
  • for i in 0โ€ฆ4 0~4๊นŒ์ง€.
  • do while => repeat while ์ •๋„..

Day2

###func..

  • ํŒŒ๋ผ๋ฏธํ„ฐ์— ์–ธ๋”๋ฐ”๋ฅผ ๋จผ์ € ์“ฐ๊ฒŒ๋˜๋ฉด => ์ด๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ๋ช…์„ ์ƒ๋žตํ•ด๋„๋œ๋‹ค. on day ์ด๋Ÿฐ์‹์œผ๋กœ ๋„์–ด์“ฐ๋ฉด ์•ž์— on์„ ํŒŒ๋ผ๋ฏธํ„ฐ๋ช…์œผ๋กœ ์“ฐ๊ฒŸ๋‹ค.( greet(_ person:String, on day:String)->String{}...

  • ํ•จ์ˆ˜๋Š” ๋ฆฌํ„ด๊ฐ’์„ ์—ฌ๋Ÿฌ๊ฐœ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

  • sumOf(numbers: Intโ€ฆ) -> int {} ์™€๊ฐ™์ด ๋งŽ์€ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋ฐฐ์—ด๋กœ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.

  • nestedFunction์„ ์‚ฌ์šฉํ•  ์ˆ˜์žˆ๋‹ค. ํ•จ์ˆ˜๋‚ด์— ํ•จ์ˆ˜๊ฐ€ ๊ฐ€๋Šฅํ•˜๋ฉฐ ๋ธ”๋ฝ์•ˆ์— variable์€ ๊ณต์œ ๋œ๋‹ค.

  • ๋‚ด๋ถ€ํ•จ์ˆ˜๋ฅผ ๋ฆฌํ„ฐํ•ด ์ค„์ˆ˜๋„ ์žˆ๋‹ค. ๊ทธ๋Ÿด๋• ์ตœ์ดˆ ๊ฒ‰์˜ ํ•จ์ˆ˜์˜ ๋ฆฌํ„ดํƒ€์ž…์ด ๋‚ด๋ถ€ํ•จ์ˆ˜์˜ ํŒŒ๋ผ๋ฏธํ„ฐ,๋ฆฌํ„ดํƒ€์ž…๊ณผ ๊ฐ™์•„์•ผํ•œ๋‹ค.(func test() -> ((Int)->(int){} ๋ผ๋ฉด ๋‚ด๋ถ€์— func testt(number:Int) -> Int {} ๊ฐ™์€ ํ•จ์ˆ˜๊ฐ€ ์กด์žฌํ•˜์—ฌ์•ผ ํ•œ๋‹ค.

  • ๋‚ด๋ถ€ ํ•จ์ˆ˜์˜ ๊ฒฝ์šฐ ์กฐ๊ฑด์ด ๋“ค์–ด๊ฐˆ ์ˆ˜๋„์žˆ๋‹ค.

  • array.map์€ ํด๋กœ์ €๋กœ ๊ฐ ํ•ญ๋ชฉ๋“ค์„ ๋ฐ˜์˜ํ•œ ๊ฒฐ๊ณผ๋ฌผ์„ ๊ฐ€์ง„ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

    //๋ฐฐ์—ด์„ ์„ ์–ธ
    let numbers = [1,2,3,4]
    //map์„ํ†ตํ•ด ๋‚ด๋ถ€ ๋ธ”๋ฝํ•จ์ˆ˜๋กœ ๋Œ๋ฆฐ ๊ฒฐ๊ณผ์˜ ๋ฐฐ์—ด์„ ๋ฆฌํ„ดํ•œ๋‹ค. 
    let data = numbers.map({
    	(number:Int) -> Int in
    		return 3*number
    })
    
  • ํด๋กœ์ ธ์—์„œ ๋ฐ›๋Š” ์ธ์ž๋Š” $0 $1 ... ๋“ฑ๊ณผ๊ฐ™์ด ๊ฐ„๋‹จํžˆ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.

Day 3

###Class..

  • ํด๋ž˜์Šค๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฉค๋ฒ„๋ณ€์ˆ˜, ๊ทธ๋ฆฌ๊ณ  ํ•จ์ˆ˜๋กœ ์ด๋ฃจ์–ด์ ธ์žˆ๋‹ค.

  • init์„ ํ†ตํ•ด ์ƒ์„ฑ์ž๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

     //์™€ ๊ฐ™์ด ์ƒ์†ํ•  ์ˆ˜์žˆ๋‹ค.
     class Square: NamedShape{}	
    
  • super.init()์„ ํ†ตํ•ด ์ƒ์† ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž๋ฅผ ๋งŒ๋“ค์ˆ˜์žˆ๊ณ ,

  • override ๋ฌธ๊ตฌ๋ฅผ ํ†ตํ•ด ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ํ•จ์ˆ˜๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋”ฉ ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • value์— get{}, set{} ์„ ๋„ฃ์„ ์ˆ˜ ์žˆ๊ณ  ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฅผ ๊ทธ๋ƒฅ ๋ถˆ๋Ÿฌ์„œ ์‚ฌ์šฉํ•˜๋ฉด get{}์ด ํ˜ธ์ถœ๋˜๊ณ  ์„ค์ •ํ•˜๋ฉด set{}์ด ์„ค์ •๋œ๋‹ค.

var permieter: Double{
        get {
            return 3.0 * sideLength
        }
        set {
            sideLength = newValue / 3.0
        }
    }
  • setter์˜ newValue๋Š” ์•”์‹œ๋œ ์ƒˆ๋กœ์šด ๊ฐ’์„ ์˜๋ฏธํ•œ๋‹ค.

Day 4

###Enum..

enum Rank: Int{
	ace = 1
}
  • Rank.ace ๋Š” ace๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • rawValue๋ฅผ ์ด์šฉํ•ด ์ˆซ์ž๊ฐ’์„ ๋ฐ›์•„์˜ฌ ์ˆ˜ ์žˆ๋‹ค.(Rank.ace.rawValue ๋Š” 1์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.)
  • ์œ„ ์˜ˆ์ œ์—์„œ์˜ enum ์€ ์ƒ์„ฑ์ž๋กœ ๊ธฐ๋ณธ Rank(rawVlaue:)๋ฅผ ๊ฐ€์ง€๊ณ  ํ•ด๋‹น ๋ฌธ์ž๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค.
  • enum์œผ๋กœ case๋ฅผ ๋ถ„๋ฅ˜ํ•˜์—ฌ ํ•ด๋‹น case์ผ ๊ฒฝ์šฐ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์–ด๋–ป๊ฒŒ ๋ณด์—ฌ์ค„ ๊ฒƒ์ธ์ง€ ๋‚˜ํƒ€๋‚ธ๋‹ค.
  • struct๋Š” ๊ตฌ์กฐ์ฒด๋ฅผ ๋งŒ๋“ ๋‹ค. ํด๋ž˜์Šค์™€ ๊ฐ™์ง€๋งŒ ํด๋ž˜์Šค๋Š” ์ฐธ์กฐํ•˜๋Š” ๋ฐ˜๋ฉด ๊ตฌ์กฐ์ฒด๋Š” ๋งค๋ฒˆ ๋ณต์‚ฌํ•˜๋Š” ํ˜•ํƒœ๋‹ค

###Protocol..

  • ํ”„๋กœํ† ์ฝœ์€ ์ธํ„ฐํŽ˜์ด์Šค๋‹ค. ์ตœ์†Œํ•œ ๊ฐ€์ €์•ผํ•  ์†์„ฑ ๋ฉ”์†Œ๋“œ๋“ฑ์„ ๊ฐ€์ง„๋‹ค.
  • struct๋Š” ์—ด๊ฑฐํ˜•์ž„์œผ๋กœ value์˜ ํƒ€์ž…๋“ฑ์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ mutating keyword๋ฅผ ํ†ตํ•˜๋ฉด ๋ณ€๊ฒฝ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

###Extension..

extension Int: ExampleProtocol {
    var simpleDescription: String {
        return "the number \(self)"
    }
    mutating func adjust() {
        self += 42
    }
}
print(7.simpleDescription)
  • ์นดํ…Œ๊ณ ๋ฆฌ์ด๋‹ค ์œ„์™€๊ฐ™์ด ๊ธฐ๋ณธ ํƒ€์ž… Int์— simpleDescription์ด๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•ด์„œ ์‚ฌ์šฉํ•œ๋‹ค.
let protocolValue: ExampleProtocol = a
  • ์œ„์™€๊ฐ™์ด ๊ธฐ์กด ํด๋ž˜์Šค์— variable๋กœ ํ”„๋กœํ† ์ฝœ์„ ์ถ”๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋‹ค.

###ErrorHandler..

enum PrintError: Error {
    case OutOfPaper
    case noToner
    case onFire
}
func send(job: Int, toPrinter printerName: String) throws -> String {
    if printerName == "Never Has Toner"{
        throw PrintError.noToner
    }
    return "job sent"
}
do{
    let printerResponse = try send(job:1040,toPrinter:"Never Has Toner")
}catch{
    print(error)
}
  • ์—๋Ÿฌ ์ผ€์ด์Šค๋ฅผ enum: Error๋กœ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ํ•ด๋‹น ์—๋Ÿฌ๋ฅผ try catch๋กœ ์žก์„์ˆ˜ ์žˆ๊ณ  throw๋ฅผ ํ†ตํ•ด ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค.
  • differ{} ๋Š” ํ•จ์ˆ˜๋‚ด๋ถ€์˜ ๋ชจ๋“  ์ฝ”๋“œ์—์„œ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์— ์‹คํ–‰๋œ๋‹ค.

###Generics..

//itemํƒ€์ž…์œผ๋กœ ๋ฐฐ์—ด์„ ๋งŒ๋“ค๊ณ  ๊ณ„์™ ์•„์ดํ…œ ํƒ€์ž…์œผ๋กœ appendํ•˜๊ฒ ๋‹ค.
func makeArray<Item>(repeating item: Item, numberOfTime: Int) -> [Item]{
    
    var rsult = [Item]()
    
    for _ in 0..<numberOfTime{
        rsult.append(item)
    }
    return rsult
}

makeArray(repeating: "knock", numberOfTime: 4)

  • ํƒ€์ž…์— ์ž์œ ๋กœ์šด ์ œ๋„ค๋ฆญ ํ•จ์ˆ˜์ด๋‹ค.

Day 5

###TypeSafety..

  • ์Šค์œ„ํ”„ํŠธ๋Š” ํƒ€์ž… ์„ธ์ดํ”„ํ•˜๋‹ค.
  • ๊ธฐ๋ณธ์ ์œผ๋กœ typeAnotation์„ ํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ ํ•ด๋‹น ํƒ€์ž…์„ ์ถ”๋ก ํ•ด ์ ํ•ฉํ•œ ํƒ€์ž…์œผ๋กœ ๋ช…์‹œํ•œ๋‹ค.
  • ์™ ๋งŒํ•˜๋ฉด ํƒ€์ž…์„ ๋ช…์‹œํ•ด์ฃผ๋Š”๊ฒƒ์ด ์ข‹๊ฒ ๋‹ค.

###type Conversion..

  • ํ˜•๋ณ€ํ™˜์€ ์•„๋ž˜์™€๊ฐ™์ดํ•˜๋‹ค.
	let valueDouble = 0.123
	let valueInt = Int(valueDouble)			

###Type Aliaces

  • ํƒ€์ž…์„ aliasํ• ์ˆ˜ ์žˆ๋‹ค.
	typealias AudioSample = UInt16
	var maxAmplitudeFound = AudioSample.min

Tuple

  • ํŠœํ”Œํ˜•ํƒœ๋ฅผ ์ œ๊ณตํ•ด์ค€๋‹ค. ์“ฐ๊ธฐ ๋งค์šฐ ๊ฐ„๋‹จํ•˜๋„ค~
	let http404Request = (404, "not Found")
	print(http404Request.0)
	print(http404Request.1)

	let (code,reason) = http404Request
	print(code)
	print(reason)

	let http200Stauts = (statusCode:200, description: "OK")
	print(http200Stauts.statusCode)
	print(http200Stauts.description)	

###Optional 2

  • ์˜ต์…”๋„์€ value๊ฐ€ ์• ๋งคํ• ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค.
let possibleNumber = "123"
let convertedNumber = Int(possibleNumber)
print(convertedNumber)
  • convertedNumber๋Š” int ๊ฐ€ ์•„๋‹ˆ๋ผ optional(Int)๊ฐ€ ๋œ๋‹ค. ์˜๋ฏธ๋Š” ํ•ด๋‹น ๊ฐ’์ด ์–ด๋– ํ•œ int ํ˜น์€ nil์ผ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.
  • ์ด์œ ๋Š” ์ปดํŒŒ์ผ๋Ÿฌ์ž…์žฅ์—์„  possibleNumber๊ฐ€ String๊ฐ’์ด => Int๋กœ ๋ณ€ํ™˜๋˜๋Š”๊ณณ์—์„œ ํ•ญ์ƒ ํ•ด๋‹น String์ด ์ˆซ์ž์ž„์„ ๋ณด์žฅ ํ•  ์ˆ˜ ์—†๋Š” ์ƒํƒœ์ด๋‹ค. ์ฆ‰ "sample" ๊ฐ™์€ ํ…์ŠคํŠธ๊ฐ€ ๋“ค์–ด๊ฐ€๊ฒŒ๋˜๋ฉด Int๋ณ€ํ™”์—์„œ nil๊ฐ’์ด ๋„์ถœ๋˜์ˆ˜๋„ ์žˆ๋Š” ์ƒํƒœ์ธ๊ฒƒ์ด๋‹ค.

๊ณ ๋กœ ๋งค์šฐ ์• ๋งคํ•œ ์ƒํƒœ๋‹ค, ์ด๋Ÿฌํ•œ ์ƒํƒœ๊ฐ€ ์กด์žฌํ•ด๋ฒ„๋ฆฌ๋ฉด safe ํ•˜์ง€ ์•Š๋‹ค.

  • ์œ„์™€๊ฐ™์€ ์ƒํ™ฉ์„ ์•Œ๋ ค์ฃผ๊ณ  ํ•ด๋‹น ์ƒํ™ฉ์„ ๋ณด๋‹ค safeํ•˜๊ฒŒ ๋ณ€ํ™˜์‹œ์ผœ์ค„ ํ•„์š”๊ฐ€ ์žˆ๋‹ค.

###OptionalBinding

  • ์˜ต์…”๋„ ๋ฐ”์ธ๋“œ๋‹ค. ํ•ด๋‹น ๊ฐ’์ด nil๊ฐ’์ธ์ง€ ์ฒดํฌํ•˜๊ฒŒ ๋˜์–ด ๋ณด๋‹ค safeํ•œ ์ฝ”๋“œ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค.
let possibleNumber = "123"

if let convertedNumber = Int(possibleNumber){
    print("convertedNumber= \(convertedNumber)")
}else {
    print("nope")

  • ํ•ญ์‚ฌ ์œ„์™€๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด optionalํ•œ ๊ฒฝ์šฐ bindingํ•ด์ฃผ๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

####Implicityly Unwrapped Optional

  • pass

Day 6

basic operators

	let(x,y) = (1,2)   
  • ์ดˆ๊ธฐํ™”๋ฅผ ๋ฉ€ํ‹ฐํ”Œ๋กœ ํ• ์ˆ˜ ์žˆ๋‹ค.
  • -9 % 4 = > -1 ์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค
  • tuple์˜ ๋น„๊ต๋Š” ๋‘๊ฐœ์ค‘ ํ•˜๋‚˜๋งŒ ๋งž์œผ๋ฉด true๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
let defaultColorName = "red"
var userDefinedColorName: String?
var colorNametoSUer = userDefinedColorName ?? defaultColorName
  • nilcoalscing operation(??)์€ ์œ„์™€ ์˜ˆ์ œ์™€ ๊ฐ™์ด ์‚ฌ์šฉ๋œ๋‹ค. nil์ผ๊ฒฝ์šฐ๋ฅผ ํŒ๋ณ„ํ•ด ๋ถ„๊ธฐํ•ด์ค€๋‹ค.

STring And Character

	var empty = ""
	var anotherEmpty = String()
  • ์œ„์™€๊ฐ™์ด ์ดˆ๊ธฐํ™” ํ•  ์ˆ˜ ์žˆ๊ณ  isEmpty ๋กœ ๋น„์–ด์žˆ๋Š”์ง€ ํ™•์ธ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

Day 7

###CollectionType

  • 3๊ฐ€์ง€ ์ฃผ์š”ํ•œ ์ฝœ๋ž™์…˜์ด ์žˆ๋‹ค.
  • array,set,dictionary์ด๋‹ค.
  • ๊ธฐ๋ณธ์ ์œผ๋กœ ์ฝœ๋ ‰์…˜์€ mutableํ•˜๋‹ค.

#####array

  • Int ๋กœ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค.
  • ์ด์ œ ์œ„์˜ array๋Š” Int๊ฐ€ ๋“ค์–ด๊ฐˆ๊ฒƒ์ด๋ผ ์ƒ๊ฐ๋˜์–ด์ง„๋‹ค.
  • [] ๋กœ ์„ ์–ธํ•˜์—ฌ ๋‹ค์‹œ ์ดˆ๊ธฐํ™” ํ•  ์ˆ˜์žˆ๋‹ค.
	var threeDoubles = Array(repeating:0.0,count:3)
  • repeat,count ์ดˆ๊ธฐํ™”๋กœ ์—ฐ์†์  ์ดˆ๊ธฐํ™”๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค

  • array ๋ผ๋ฆฌ์˜ + ์—ฐ์‚ฐ์€ ๋‘ ์–ด๋ ˆ์ด๋ฅผ ์ด์–ด์„œ ์—ฐ๊ฒฐํ•ด์ค€๋‹ค. (์›์†Œ๋ผ๋ฆฌ ๋”ํ•˜๋Š”๊ฒƒ์€ ์•„๋‹ˆ๋‹ค)

  • bracket์„ ํ†ตํ•ด ์ดˆ๊ธฐํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค

	var shppoingListWithBrackets: [String] = ["saousage","carrot"]

  • swift๋Š” ๋˜‘๋˜‘ํ•ด์„œ
	var shoppingList = ["eggs","milk"]
  • ์™€๊ฐ™์ด ํ•˜์—ฌ๋„ ๋‘๊ฐœ์˜ ํƒ€์ž…์„ ๋ณด๊ณ  String์ด๋ผ๊ณ  ์ถ”๋ก ํ•œ๋‹ค.
  • count,isEmpty๊ฐ™์€ ํ•จ์ˆ˜๋“ค์„ ๋‚ด์žฅํ•œ๋‹ค.
	shoppingList += ["pizza","banan"]
  • += ๋Š” ๋’ค์— ๋ฆฌ์ŠคํŠธ๋ฅผ ์ถ”๊ฐ€๋กœ ๋ถ™์—ฌ์ค€๋‹ค.
  • append ํ•จ์ˆ˜๋ฅผ ๋Œ€์‹ ํ•˜์—ฌ ์“ธ ์ˆ˜ ์žˆ๋‹ค.
	shoppingList[4...6] = ["a","b","c"]
  • ์œ„์™€๊ฐ™์ด ๋ฒ”์œ„๋กœ ํ•œ๋ฐฉ์— ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋‹ค.
  • insert,remove๋“ฑ ๋‹ค์–‘ํ•œ ํ•จ์ˆ˜ ์กด์žฌ.
	for (index,value) in shoppingList.enumerated() {
    print("index = \(index) value =\(value)")
    }

  • enumberated๋ฅผ ํ†ตํ•ด ๋ฐ˜๋ณต๋ฌธ์„ ์“ธ ์ˆ˜ ์žˆ๋‹ค.

day 8

####Set

  • (hashble)๋ชจ๋“  swift์˜ ๊ธฐ๋ณธํƒ€์ž…(String,Int..) ๋Š” ํ•ด์‹œ๋ธ”์ด ๋””ํดํŠธ์ด๋‹ค. ๊ทธ๋ž˜์„œ ๋ฒจ๋ฅ˜๋‚˜ ํ‚ค๊ฐ’์œผ๋กœ ์ด์šฉ๋  ์ˆ˜ ์žˆ๋‹ค.
	var letters = Set<Character>()
	var favoriteGenres: Set<String> = ["Rock","Classic","hiphop"]
  • ์œ„์™€ ๊ฐ™์ด ์ดˆ๊ธฐํ™” ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๊ทธ๋Ÿฌ๋‚˜. swift๋Š” ํƒ€์ž…์„ ์ถ”๋ก ํ•จ์œผ๋กœ
	var favoriteGenress: Set = ["Rock","clasic"]
  • ์ด๋ ‡๊ฒŒ ์“ธ ์ˆ˜๋„ ์žˆ๋‹ค.
  • insert,count,isEmpty๋“ฑ์˜ ํ•จ์ˆ˜๊ฐ€ ์ง€์›๋œ๋‹ค.
  • ๊ทธ์™ธ์˜ set์˜ ํŠน์„ฑ์„๊ฐ€์ง„ union,insersection,substracting,symmetricDifference๋“ฑ์ด ์ œ๊ณต๋œ๋‹ค.

####Dictionary

  • ๊ฐ value๋Š” ๊ณ ์œ ์˜ key์™€ ๋งตํ•‘๋œ๋‹ค.
	var numberOfIntegers = [Int:String]()
numberOfIntegers[10] = "hi"
  • ์œ„์™€๊ฐ™์ด ์ดˆ๊ธฐํ™”ํ•˜๊ณ  ์ž…๋ ฅํ•œ๋‹ค.
	var airports: [String: String] = ["aaa":"asiana","bbb":"koreanAir"]
  • ๋‹น์—ฐ ํ‚คํŽ˜์–ด๋กœ ๋ฆฌํ„ฐ๋Ÿดํ•˜๊ฒŒ์‚ฌ์šฉ๊ฐ€๋Šฅ.
	var airports = ["aaa":"asiana","bbb":"koreanAir"]
  • ์–ด๋ ˆ์ด,์…‹๊ณผ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์œ„์™€๊ฐ™์ด ์ž…๋ ฅํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ชจ๋‘ ๊ฐ™์€ ํƒ€์ž…์ด๊ธฐ์— ๊ฐ€๋Šฅํ•œ๊ฒƒ์ด๋‹ค.
	for (portCode,portName) in airports {
    	print(portCode)
	    print(portName)
	}
  • ์œ„์™€๊ฐ™์ด ํฌ๋ฃจํ”„๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
	for portCode in airports.keys{
	    print(portCode)
	}
	for portCode in airports.values{
    	print(portCode)
	}
  • ํ‚ค์™€ ๋ฒจ๋ฅ˜๋„ ์†์‰ฝ๊ฒŒ ์ถ”์ถœ๊ฐ€๋Šฅํ•˜๋‹ค
	let airportCode = [String](airports.keys)
  • ํ‚ค๊ฐ’๋งŒ, ๋ฒจ๋ฅ˜๊ฐ’๋งŒ arr๋กœ ์ถ”์ถœํ•  ์ˆ˜ ์žˆ๋‹ค.

day 9

####Function

  • func์ด๋ž€ ํ‚ค์›Œ๋“œ๋ฅผ ์•ž์— ๋‹ฌ์•„ ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋ฆฌํ„ด ํƒ€์ž…์„ -> ๋ฅผ ํ†ตํ•ด ์ •ํ•ด์ค€๋‹ค.
  • ํ•จ์ˆ˜ ๊ธฐ์ž…๋ฐฉ์‹์ด๋‹ค๋ฅด์ง€ ์‚ฌ์šฉํ•œ๋ฐฉ๋ฒ•์€ ์ผ๋ฐ˜์–ธ์–ด์™€ ํฌ๊ฒŒ ๋‹ค๋ฅด์ง€ ์•Š๋‹ค.
	func returnMultiple(array: [Int]) -> (first: Int,second: Int){
    
    
	    return (array[0],array[1])
	}

	var array = [1,2,3,]

	returnMultiple(array: array).0
  • ๋‹ค๋งŒ ํŠน์ดํ•˜๊ฒŒ ๋ฆฌํ„ด์„ ์—ฌ๋Ÿฌ๊ฐœ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.
  • ํ•จ์ˆ˜์—์„œ nil์ด ๋–จ์–ด์งˆ ์ˆ˜ ์žˆ์„๊ฒฝ์šฐ ๋ฆฌํ„ด๊ฐ’์— ? ๋ฅผ๋ถ™์—ฌ ์˜ต์…”๋„์ผ์ˆ˜์žˆ๋‹ค๋Š” ๊ฒƒ์„ ๋ช…์‹œํ•ด์ฃผ๊ณ  ์ฒ˜๋ฆฌํ•ด์ค˜์•ผํ•œ๋‹ค.
	func ssum(a first: Int, b sec: Int) -> Int 
  • ์œ„์™€๊ฐ™์ด ํ•จ์ˆ˜ํ˜ธ์ถœ์‹œ ํŒŒ๋ผ๋ฏธํ„ฐ๋ช…๊ณผ ์‹ค์ œ ํ•จ์ˆ˜๋‚ด๋ถ€์—์„œ ์“ฐ๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์„ค์ •ํ•ด ์ค„ ์ˆ˜ ์žˆ๋‹ค.
  • ์ฒ˜์Œ ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” _ ๋ฅผ ์ด์šฉํ•˜์—ฌ ์•ˆ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.
	func ssum(_ first: Int, b sec: Int = 12) -> Int {
  • default value๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.๊ฐ’์ด ์—†์„ ๊ฒฝ์šฐ default๊ฐ’์ด ๋“ค์–ด๊ฐ„๋‹ค.
	func sumsArray(_ numbers: Int ...) -> Int 
	print(sumsArray(1,2,3,4,5))
  • variable์„ ... ์œผ๋กœ ์ˆœ์ฐจ๋Œ€๋กœ ๋ฐฐ์—ด๋กœ ๋ฐ›๊ณ  ์ด๋ฅผ array์™€ ๊ฐ™์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

day 10

functiontype

  • ํ•จ์ˆ˜ํƒ€์ž…์ด๋ž€, ํ•จ์ˆ˜ ํŒŒ๋ผ๋ฏธํ„ฐ, ๊ทธ๋ฆฌ๊ณ  ๋ฆฌํ„ด๊ฐ’์— ๋Œ€ํ•œ ํƒ€์ž… ๊ฐฏ์ˆ˜์— ๊ด€ํ•œ ์ด์•ผ๊ธฐ๋‹ค.
	func addTwoInts(_ a: Int, _ b: Int) -> Int 
	func multiplyTwoInts(_ a: Int, _ b: Int) -> Int 
  • ์œ„์˜ ๋‘ํ•จ์ˆ˜์˜ ํ•จ์ˆ˜ํƒ€์ž…์€ 2๊ฐœ์˜ Int๋ฅผ ํŒŒ๋ฆฌ๋ฏธํ„ฐ๋กœ ๋ฐ›๊ณ  Intํƒ€์ž…์œผ๋กœ ๋ฆฌํ„ดํ•จ์„ ์˜๋ฏธํ•œ๋‹ค.

usingFunctionType

	var mathFunction: (Int,Int) -> Int = addTwoInts
  • mathFunction์€ ์ธํŠธ๋‘๊ฐœ๋ฅผ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ๋ฐ›๊ณ  ์ธํŠธ๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค๋Š” ํƒ€์ž…์„ ๊ฐ€์ง€๊ณ  addTowIntsํ•จ์ˆ˜๋ฅผ ๋ถ€๋ฅธ๋‹ค ๋Š”๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.
  • ์‰ฝ๊ฒŒ ํ•จ์ˆ˜์˜ ํƒ€์ž…์„ ์ผ๋ฐ˜ Int,String๊ณผ ๊ฐ™์ด ์„ ์–ธํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.
	print("\(mathFunction(2,3))")
  • ์œ„์˜๊ฒฐ๊ณผ๋Š” 2+3 ์ธ 5๊ฐ€ ๋‚˜์˜ค๊ฒŒ๋œ๋‹ค.
	mathFunction = multiplyTwoInts
  • ์œ„์™€ ๊ฐ™์ด ์„ ์–ธํ•˜๋ฉด ํ•ด๋‹น variable(mathFunction)์ด 2*3 6์˜ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅ๋˜๊ฒŒ๋œ๋‹ค.

  • ์ด functionType์€ ํ•จ์ˆ˜์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค.

	func printMathResult(_ mathFunction: (Int, Int) -> Int, _ a: Int, _ b : Int) {
    	print("result => \(mathFunction(a,b))")
	}

	printMathResult(mathFunction, 5, 3)
  • (Int,Int) -> Int ํƒ€์ž…์˜ ๋ณ€์ˆ˜๊ฐ€ ์ฒซ๋ฒˆ์งธ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋“ค์–ด๊ฐ€๋ฉด ๋œ๋‹ค.

  • ๊ทธ๋ฆฌ๊ณ  ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ ํ•ด๋‹น ํƒ€์ž…์„ ๊ฐ€์ง„ ํ•จ์ˆ˜์˜ ๊ฐ’์„ ์ฝœ ํ•œ๋‹ค.

  • ์œ„์—์„œ ์šฐ๋ฆฌ๊ฐ€ mathFunction์„ multiplyTwoInts๋ผ๊ณ  ์„ ์–ธํ•˜์˜€์Œ์œผ๋กœ ํ•ด๋‹น ํ•จ์ˆ˜๊ฐ€ ์ฝœ๋˜์–ด 5*3 ์ธ 15์˜ ๊ฐ’์ด ์ถœ๋ ฅ๋˜๊ฒŒ๋œ๋‹ค.

  • ํ•จ์ˆ˜ํƒ€์ž…์€ ๋ฆฌํ„ด ํƒ€์ž…์—๋„ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค.

	var	currentValue = 3 
	func stepForward(_ input:Int) -> Int {
   	 	return input + 1
	}
	func stepBackward(_ input:Int) -> Int {
    	return input - 1
	}
	func choseStepFucntion(backword: Bool) -> (Int) -> Int {
    	return backword ? stepBackward : stepForward
	}
	var currentValue = 3
	//ํ˜„์žฌ๊ฐ’์ด 0๋ณด๋‹ค ํด๊ฒฝ์šฐ true๊ฐ€ ๋จ์„ stepBackword๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  input+1์„ ํ•˜๊ณ  ํ•ด๋‹น int๋ฅผ ๋ฆฌํ„ด ํ•œ๋‹ค
	let MoveNearerTozer = choseStepFucntion(backword: currentValue > 0 )
print(MoveNearerTozer(3))

  • chooseStepFucntion์˜ ํŒŒ๋ผ๋ฏธํ„ฐ์™€ ๋ฆฌํ„ด๊ฐ’๋“ค์€ ์ฒซ๋ฒˆ์งธ๋กœ ๋ถˆ๋ฆฌ์–ธ๊ฐ’์„ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ๊ฐ€์ง€๊ณ  ๋‘๋ฒˆ์งธ๋กœ steopbackward,stepForward์— ๋“ค์–ด๊ฐˆ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋ฐ›๊ฒŒ๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰ ์ตœ์ข…๋ฆฌํ„ด๋  ํƒ€์ž…์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.

  • ์ผ๋‹จ MoveNearerTozer๋Š” ์ค‘๊ฐ„ stepBackword,steopForward ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ’์„ ์ œ์™ธํ•˜๊ณ  ์ตœ์ดˆ choseTepFunction์—์„œ ์‚ฌ์šฉ๋  backword๋งŒ์„ ๋ฐ›์•„ ์กฐ๊ฑด๋งŒ์„ ์ •ํ•ด์ค€๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” currentVlaue๊ฐ’์ด 0๋ณด๋‹ค ํฌ๋ƒ? ๋ฅผ ๋ถˆ๋ฆฌ์–ธ์œผ๋กœ ๋„˜๊ฒจ์ฃผ๊ฒŒ๋œ๋‹ค.

  • ์ดํ›„ MoveNearerTozer๋ฅผ ํ˜ธ์ถœํ• ๊ฒฝ์šฐ stepBackwarod or step Forward์— ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋“ค์–ด๊ฐˆ ๊ฐ’์„ ๋„ฃ์–ด์ค€๋‹ค.

  • ๊ทธ๋ ‡๊ฒŒ๋˜๋ฉด

    • ์•ž์— currentVlaue๊ฐ’์˜ ๋น„๊ต๋ฅผ ํ†ตํ•ด stepBackword, stepForward์–ด๋А ํ•จ์ˆ˜๋กœ ๊ฐˆ์ง€ ์ •ํ•ด์ง€๊ณ 
    • MoveNearerTozer(3)์˜ 3์˜๊ฐ’์ด ์ •ํ•ด์ง„ ํ•จ์ˆ˜(stepBackword or stepForward)๋กœ ๋„˜์–ด๊ฐ€๊ฒŒ๋˜๊ณ 
    • ํ•ด๋‹น ํ•จ์ˆ˜์—์„œ์˜ ๋ฆฌํ„ด๊ฐ’์„ ๋‹ค์‹œ ๋ฐ˜ํ™˜ํ•˜๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.
  • ํ˜„์žฌ์ƒํ™ฉ์—์„  currentVlaue๊ฐ€ 3์ด๊ณ  0๋ณด๋‹ค ํผ์œผ๋กœ true ์ด๋ฉฐ

  • stepBackward๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ํŒŒ๋ผ๋ฏธํ„ฐ์—(input)์— 3์ด ๋“ค์–ด๊ฐ€๊ฒŒ๋˜์–ด 3-1 ์ด ๋ฆฌํ„ด๋˜์–ด ์ตœ์ข… 2์˜๊ฐ’์ด MoveNearerTozer ๋ฐ˜ํ™˜๋˜์–ด์ง„๋‹ค.

About

swift ABC Study

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors