[swift] 기본문법(6)
ios/swift

[swift] 기본문법(6)

import UIKit

/*
15. protocol
특정 역할을 하기 위한 메서드, 프로퍼티, 기타 요구사항 등의 청사진
 */

protocol SomeProtocol {}

protocol SomeProtocol2 {}

struct SomeStructure: SomeProtocol, SomeProtocol2 {}

/*
 클래스는 프로토콜을 받기 전에 상속하는 슈퍼클래스를 먼저 써야한다.
 class SomeClass: SomeSuperClass, FirstProtocol, AnotherProtocol ... { }
 */


protocol FirstProtocol {
    var name: Int { get set }
    var age: Int { get }
}

protocol AnotherProtocol {
    static var someTypeProperty: Int { get set }
}

protocol FullyNames {
    var fullName: String { get set }
    func printFullName()
}

struct Person: FullyNames {
    var fullName: String
    func printFullName(){
        print(fullName)
    }
}

protocol SomeProtocoal3 {
    func someTypeMethod()
}

protocol SomeProtocoal4 {
    init(someParmas: Int)
}

protocol SomeProtocol5 {
    init()
}

class SomeClass:SomeProtocol5 {
    // 클래스에서 프로토콜이 요구하는 생성자를 채택하려면 required 식별자 사용
    required init(){
        
    }
}


/*
 16. extension
 기존의 클래스, 구조체, 열거형, 프로토콜에 새로운 기능을 추가하는 기능
 추가할 수 있는 기능
    - 연산 타입 프로퍼티 / 연산 인스턴스 프로퍼티
    - 타입 메서드 / 인스턴스 메서드
    - 이니셜라이저
    - 서브스크립트
    - 중첩 타입
    - 특정 프로토콜을 준수할 수 있도록 기능 추가
 */

extension Int {
    var isEven: Bool {
        return self % 2 == 0
    }
    
    var isOdd: Bool {
        return self % 2 == 1
    }
}

var number = 3
number.isOdd // true
number.isEven // false

extension String {
    func convertToInt() -> Int? {
        return Int(self)
    }
}

var stringNumber = "0"
stringNumber.convertToInt() // 0


/*
 17. 열거형
 연관성이 있는 값들을 모아놓은 것
 */

// 하나의 새로운 타입처럼 사용가능 -> 이름 대문자로 시작해야 함
enum CompassPoint: String {
    /*
     한 줄로도 표현 가능
     case north, south, east, west
     */
    case north = "북" // 원시값
    case south = "남"
    case east = "동"
    case west = "서"
}

var direction = CompassPoint.east //east
direction = .west // west

switch direction {
case .north:
    print(direction.rawValue)
case .south:
    print(direction.rawValue)
case .east:
    print(direction.rawValue)
case .west:
    print(direction.rawValue) // 서
}

let direction2 = CompassPoint(rawValue: "남") // south


enum PhoneError {
    case unknown
    case batteryLow(String)
}

let error = PhoneError.batteryLow("배터리가 곧 방전됩니다.")

switch error{
case .batteryLow(let message):
    print(message)
case .unknown:
    print("알 수 없는 에러입니다.")
}
반응형

'ios > swift' 카테고리의 다른 글

[swift] 기본문법(7)  (0) 2021.11.09
[swift] 기본문법(5)  (0) 2021.11.08
[swift] 기본문법(4)  (0) 2021.11.07
[swift] 기본문법(3)  (0) 2021.11.06
[swift] 기본문법(2)  (0) 2021.11.06