SWIFTプロトコル(2020.11.3)
13556 ワード
プロトコル
プロトコル
定義方法、Property、頭文字Riserなどの要件.
構造体、クライアント、および列挙式はプロトコルを採用します.
プロトコル要件の実装
どのプロトコルの要件も満たすタイプ
契約を守る
合意の要件を満たすために、
すべて体現しなければならない
定義#テイギ#
protocol 프로토콜 이름 {
/*정의부*/
}
protocol Talkable{
// 프로퍼티 요구
// 프로퍼티 요구는 항상 var 키워드를 사용한다
// get은 읽기만 가능해도 상관없다는 뜻이다
// get과 set을 모두 명시하면
// 읽기 쓰기 모두 가능한 프로퍼티여야 한다
var topic: String {get set}
var language: String {get}
// 메서드 요구
func talk() // 필요한 메서드만 표시하고, 자세한 코드는 프로토콜을 상속받는 클래스? 함수? 에서 구현한다.
// 이니셜라이저 요구
init(topic: String, language: String)
}
契約の採用と遵守
sturct Person : Talkable{
var topic : String
let language : String
// 읽기전용 프로퍼티 요구는 연산 프로퍼티로 대체가 가능합니다.
// var languange: String {return "한국어"}
// 위와 아래 코드는 동일한 코드이다
// var languange: String {get { return "한국어"} }
물론 읽기, 쓰기 프로퍼티도 연산 프로퍼티로 대체할 수 있습니다.
var subject : String = ""
var topic : String {
set {
self.subject = newValue
}
get {
return self.subject
}
}
func talk(){
print("\(topic)에 대해\(language)로 말합니다.")
}
init(topic: String, language: String){
self.topic = topic
self.language = language
}
}
プロトコルの継承
プロトコルはクラスと完全に一致します.
/*
protocol 프로토콜 이름: 부모 프로토콜 이름 목록{
/* 정의부 */
}
*/
protocol Readable{
func read()
}
protocol Writeable{
func write()
}
protocol ReadSpeakable: Readable {
// func read() // Readable 에서 상속을 받아서 read 함수를 이미 가지고 있다.
func speak()
}
protocol ReadWriteSpeakable: Readable, Writeable{
// func read()
// func write() // Readable과 Writeable 프로토콜을 상속받아서 read write 함수를 가지고 있다.
func speak()
}
struct SomeType: ReadWriteSpeakable{
func read(){
print("Read")
}
func write(){
print("Write")
}
func speak(){
print("Speak")
}
}
// 정의한 것들 중에 하나라도 빠진것이 있다면
//struct SomeType: ReadWriteSpeakable{
// func speak(){
// print("Speak")
// }
//}
クラス継承とプロトコル
クラスで継承とプロトコルを同時に使用するには
まず継承するクラスを宣言します.
次に、使用するプロトコルのリストを作成します.
class SuperClass: Readable {
func read() { print("read") }
}
class SubClass : SuperClass, Writeable, ReadSpeakable {
func write() { print("write") }
func speak() { print("speak") }
}
プロトコルコンプライアンスの検証
インスタンスが特定のプロトコルに合致しているかどうか.
is as演算子の使用
let sup: SuperClass = SuperClass()
let sub : SubClass = SubClass()
var someAny : Any = sup
someAny is Readable // true
someAny is ReadSpeakable // false
someAny = sub
someAny is Readable // true
someAny is ReadSpeakable // true
someAny = sup
if let someReadable : Readable = someAny as? Readable {
someReadable.read()
}// read
if let someReadSpeakable : ReadSpeakable = someAny as? ReadSpeakable{
someReadSpeakable.speak()
} // 동작하지 않음
someAny = sub
if let someReadable: Readable = someAny as? Readable {
someReadable.read()
} // read
ソース:youtube“yagom”Reference
この問題について(SWIFTプロトコル(2020.11.3)), 我々は、より多くの情報をここで見つけました https://velog.io/@michael00987/Swift-프로토콜2020.11.3-la4shainテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol