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 |