낭만 프로그래머

Swift 기본 문법 정리 본문

Swift

Swift 기본 문법 정리

조영래 2023. 7. 19. 11:13

1. 변수, 상수
var : 변수
let : 상수
* 접근제한자 : (제약이 많음) open > public > internal > fileprivate > private (제약이 적음)
* static, class : 전역변수로 사용 (static은 오버라이딩이 안됨)
* final : 오버라이딩 불가
* 타입? : null일수 있음
* 변수! : 강제로 null이 아님을 지정
* ( 변수 ?? default ) : nil일 경우 default를 값으로 

2. Tuple

var tuple1 = {"data1", "data2"}
tuple1.0 //data1
tuple1.1 //data2

var tuple2 = {status: "data1", title: "data2"}
tuple2.status //data1
tuple2.title //data2


3. IF

if count <= 10 {
}


4.  Switch
* 다른 언어와 달리 break를 해주지 않아도 해당 case만 실행 한 후 빠져나온

switch test {
case "a", "A":
    print("A")
default:
    print("Not")
}



5. For

for country in countries 

for (key, value) in keyValues 

for index in 1...20


6. While

while count < 10 {
}

repeat {
} while count < 10


7. String
* 변수.description : String 형으로 변환되어 보여줌
* last() 
* dropLast()
* split()

8. Array

var countryArray = Array<String>()
var countryArray = [String]()

for (index, country) in countryArray.enumerated() {
}

* append()
* insert()
* sort(), sorted()

9. Set

var set1: Set = [1,2,3,4,5,6]
var set2: Set = [1,2,3,4,5,6]

set1.union(set2) //합집합
set1.insertsection(set2) //교집합
set1.symmetricDifference(set2) // 합집합-교집합
set1.subtracting(set2) //여집합


10. Dictionary

var isoCountry = [String : String]()
isoCountry["kor"] = "대한민국"

var isoCountry = ["kor" : "대한민국", "ukr" : "우크라이나"]
isoCountry.keys

for data in isoCountry {
}


11. Function

func plus(num1: Int, num2: Int) -> Int {
	return num1+num2
}

func plus(num1: Int, num2: Int) -> (Int, String) {
	return (num1+num2, "테스트")
}

func plus(_ num1: Int, _ num2: Int) -> Int {
	return num1+num2
}

func parentPlus(num1: Int, num2: Int, plusFunc: ((Int, Int) -> Int)) {
	plusFunc(num1, num2)
}


12. Closure

let testClosure = { (a: Int) -> String in
	return "\(a)점"
}

let testCLosure = { (a: Int) -> String in
	"\(a)점"
}

let testCLosure = { (a: Int) in
	"\(a)점"
}

let testCLosure: (Int) -> String  = { a in
	"\(a)점"
}

let testCLosure: (Int) -> String  = { 
	"\($0)점"
}


13. enum

enum Classification {
    case part
    case drawing
    case document
}

enum Classification {
    case part(title: String, seq: Int)
    case drawing(title: String, seq: Int)
    case document(title: String, seq: Int)
}

func saveClassification(classification Classification) {
	if classification == .part {
    }
}


14. class

class Info {
	init(n: String) {
    }
    
    init(n: String, m: Int) {
    }
    
    convenience init() {
        self.init("ADS")
    }
    
    deinit {
    }
}

var infoInstance = Info("AAAAA")
class Parent {
    func abc() -> String {
    	return "AA"
    }
    
    func ttt() -> String {
    	return "AA"
    }
}

class Child: Parent {
	override func abc() -> String {
    	return super.ttt()
    }
}
var name = "" //클래스 생성시 메모리 로딩
lazy var name = "" //호출 시점에 메모리 로딩

var _title = ""
var title: String {
    get{
        return _title
    }
    set{
        _title = newValue
    }
}


15. struct
* class와 다르게 참조가 아닌 복사로 기능이 이루어 진다

struct Test {
	var name = ""
    func someFunc() {
    }
}

var test1 = Test()
var test2 = test1 // test2와 test1은 다른 인스턴스임 (복사니까)


16. extension

extension Int {
	var oddEven: Int {
    	if self % 2 == 0 {
            return 1
        }
        else {
            return 2
        }
    }
}

4.oddEven


17. protocal
* interface와 유사함. 여러개를 implements 할 수 있음

protocal UserInfo {
    var name: String {get set}
    var age: Int {get set}
    
    func isAult() -> Bool
}

extension UserInfo {
    func isChild() -> Bool {
        return false
    }
}

class My: UserInfo {
}


18. generic

struct IntStack<CustomType> {
    var items = [CustomType]()
    
    mutating func push(item: CustomType) {
        items.append(item)
    }
    
    mutating func pop() -> MyType? {
    }
}

var myStack = IntStack<String>()


19. 고차원 함수
* map()
* reduce()
* filter()
* compactMap()
* flatMap()