티스토리 뷰
출처
프로토콜
문법
protocol SomeProtocol {
}
protocol AnotherProtocol: SomeProtocol {
}
protocol TheOtherProtocol : SomeProtocol, AnotherProtocol {
}
프로퍼티 요구사항
protocol SomeProtocol {
var mustBeSettable: Int { get set }
var doesNotNeedToBeSettable: Int { get }
}
protocol AnotherProtocol {
static var someTypeProperty: Int { get set }
}
protocol FullyNamed {
var fullName: String { get }
}
struct Person: FullyNamed {
var fullName: String
}
let john = Person(fullName: "John Appleseed")
// john.fullName is "John Appleseed"
class 가 FullNameProtocol 을 구현하는 예제이다.
protocol FullNameProtocol {
var fullName: String { get }
}
class Person: FullNameProtocol {
var prefix: String
var name: String
init(_ prefix: String, _ name: String) {
self.prefix = prefix
self.name = name
}
var fullName: String {
return "\(self.prefix) \(self.name)"
}
}
var person = Person("Enterprise", "USS")
print(person.fullName)
메소드 요구사항
protocol SomeProtocol {
static func staticMethod()
func instanceMethod()
}
class TestClass: SomeProtocol {
static func staticMethod() {
print("staticMethod")
}
func instanceMethod() {
print("instanceMethod")
}
}
Mutating 메소드 요구사항
protocol SomeProtocol {
mutating func toggle()
}
enum EnumTest: SomeProtocol {
case Off
case On
mutating func toggle() {
switch self {
case .On:
self = .Off
case .Off:
self = .On
}
}
}
class ClassTest: SomeProtocol {
func toggle() {
print("toggle")
}
}
var e = EnumTest.Off
e.toggle()
초기화 요구사항
프로토콜 타입을 준수해서 구현되도록 특정 초기화를 요구할 수 있다.
이 때 프로토콜을 준수하는 클래스에서는 required 키워드를 사용해야한다.
protocol SomeProtocol {
init(someParameter: Int)
}
class SomeSuperClass: SomeProtocol {
required init(someParameter: Int) {
}
}
class SomeClass: SomeSuperClass, SomeProtocol {
required override init(someParameter: Int) {
}
}
Delegate 패턴, Protocol 상속
Class 전용 프로토콜
protocol SomeProtocol: class {
func print()
}
class SomeClass:SomeProtocol {
func print() {
}
}
프로토콜 합성
protocol Named {
var name: String { get }
}
protocol Aged {
var age: Int { get }
}
struct Person: Named, Aged {
var name: String
var age: Int
}
func wishHappyBirthday(to celebrator: Named & Aged) {
print("Happy birthday, \(celebrator.name), you're \(celebrator.age)!")
}
let birthdayPerson = Person(name: "Malcolm", age: 21)
wishHappyBirthday(to: birthdayPerson)
프로토콜 준수 체크
if let hasNamed = birthdayPerson as? Named {
print("true")
}
기본 구현 제공하기 (extension)
protocol SomeProtocol {
func someMethod()
}
extension SomeProtocol {
func someMethod() {
print("someMethod")
}
}
class SomeClass: SomeProtocol { }
let a = SomeClass()
a.someMethod()
'iOS 개발 > Swift' 카테고리의 다른 글
[Swift 3] ARC (Automatic Reference Counting) (0) | 2017.04.18 |
---|---|
[Swift 3] 제네릭 (Generics) (0) | 2017.04.16 |
[Swift 3] 해제 (Deinitialization) (0) | 2017.04.15 |
[Swift 3] 초기화 (Initialzer) (0) | 2017.04.15 |
[Swift 3] 상속 (Inheritance) (0) | 2017.04.15 |
- Total
- Today
- Yesterday
- delegate
- docker
- applicationWillResignActive
- dictionary
- string
- Swift
- 꺼내먹어요
- coredata
- CIImage
- Swift 3.0
- CGImage
- AWS
- Swift3
- NSManagedObject
- workerThread
- set
- Swift 3
- optional
- Block
- HTTP
- UIView
- Arc
- Swfit
- RunLoop
- ios
- NSManagedObjectContext
- 읽기 좋은 코드가 좋은 코드다
- EffectiveObjectiveC
- NSManagedObjectModel
- thread
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |