SWIFT TOURでSWIFT#7を学ぶ.Protocols and Extensions
10804 ワード
🍫 コンセプトで表示
*この記事はアップル社の「Aswift Tour」に基づいて書かれています.学習や記録のために書かれているので、不正確な情報があるかもしれません.
**コンセプトで作成されたドキュメントなので、写真リンクのエラーやドキュメントのフォーマットが不便になる可能性があります.△写真が出なかったり、コードが見えなかったりしたら、できるだけ早く修正します.
7. Protocols and Extensions
*この記事はアップル社の「Aswift Tour」に基づいて書かれています.学習や記録のために書かれているので、不正確な情報があるかもしれません.
**コンセプトで作成されたドキュメントなので、写真リンクのエラーやドキュメントのフォーマットが不便になる可能性があります.△写真が出なかったり、コードが見えなかったりしたら、できるだけ早く修正します.
7. Protocols and Extensions
protocol
protocol
を使用してプロトコルを宣言します.protocol ExampleProtocol {
var simpleDescription: String { get }
mutating func adjust()
}
* **{ get }**
: read only.
* **mutating func
:** modify the properties of a value type
class, enum, struct can all adopt protocols
クラス、列挙体、構造体はいずれもプロトコルを採用することができる.class SimpleClass: ExampleProtocol {
var simpleDescription: String = "A very simple class."
var anotherProperty: Int = 69105
func adjust() { //modify
simpleDescription += " Now 100% adjusted."
}
}
var a = SimpleClass()
// a.adjust()를 수행
a.adjust()
let aDescription = a.simpleDescription
// "A very simple class. Now 100% adjusted."
struct SimpleStructure: ExampleProtocol {
var simpleDescription: String = "A simple structure"
mutating func adjust() {
simpleDescription += " (adjusted)"
}
}
var b = SimpleStructure()
// b.adjust()를 수행
b.adjust()
let bDescription = b.simpleDescription
// "A simple structure (adjusted)"
⑪簡易構造宣言部の2479142キーワードは、修正構造体を示す.SimpleClassは、クラス内のメソッドが常にクラスを変更できるため、メソッドのタグは必要ないと宣言します.**mutating**
ExampleProtocolにその他の必要条件を追加します.SimpleClassとSimpleStructureでは、プロトコルを変更する必要がありますか?protocol ExampleProtocol {
var simpleDescription: String { get }
mutating func adjust()
func adjustSecond()
}
ExampleProtocolを採用する場合はfunc adjustSecond()を記入してください.
**experiment**
川ではextension
を使用してタイプに機能を追加します.たとえば、新しいメソッドまたは計算のプロパティです.**익스텐션extension**
を使用して、**프로토콜 준수성protocol conformance**
にプロトコル整合性を宣言したり、ライブラリまたはフレームワークにロードされたタイプを익스텐션extension
に追加したりできます.extension Int: ExampleProtocol {
var simpleDescription: String {
return "The number \(self)"
}
mutating func adjust() {
self += 42
}
}
print(7.simpleDescription)
experiment
絶対値属性を追加したDouble Type Extensionを作成します.?????????
extension Double: ExampleProtocol {
var simpleDescription: String {
return "The number \(self)"
}
mutating func adjust() {
if self < 0{
self = abs(self)
}
}
}
var number = -7.34
プロトコル名は、他のタイプのネーミングタイプtypeとして使用できます.たとえば、異なるタイプのオブジェクトが単一のプロトコルに従うコレクションを作成できます.処理値タイプがプロトコルタイプの値である場合、プロトコル定義以外のメソッドは使用できません.let protocolValue: ExampleProtocol = a
print(protocolValue.simpleDescription)
// Prints "A very simple class. Now 100% adjusted."
// print(protocolValue.anotherProperty) // Uncomment to see the error
ProtocolValueが単純クラスのランタイムタイプを持っていても、コンパイラはExampleProtocolタイプと見なされます.これは、プロトコルコンプライアンスプロトコルとは異なり、クラスが実行するimplementsメソッドまたは属性に偶然アクセスできないことを意味します.
Reference
この問題について(SWIFT TOURでSWIFT#7を学ぶ.Protocols and Extensions), 我々は、より多くの情報をここで見つけました
https://velog.io/@yoogail/A-Swift-Tour로-Swift-공부하기-7.-Protocols-and-Extensions
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
protocol ExampleProtocol {
var simpleDescription: String { get }
mutating func adjust()
}
class SimpleClass: ExampleProtocol {
var simpleDescription: String = "A very simple class."
var anotherProperty: Int = 69105
func adjust() { //modify
simpleDescription += " Now 100% adjusted."
}
}
var a = SimpleClass()
// a.adjust()를 수행
a.adjust()
let aDescription = a.simpleDescription
// "A very simple class. Now 100% adjusted."
struct SimpleStructure: ExampleProtocol {
var simpleDescription: String = "A simple structure"
mutating func adjust() {
simpleDescription += " (adjusted)"
}
}
var b = SimpleStructure()
// b.adjust()를 수행
b.adjust()
let bDescription = b.simpleDescription
// "A simple structure (adjusted)"
protocol ExampleProtocol {
var simpleDescription: String { get }
mutating func adjust()
func adjustSecond()
}
extension Int: ExampleProtocol {
var simpleDescription: String {
return "The number \(self)"
}
mutating func adjust() {
self += 42
}
}
print(7.simpleDescription)
?????????
extension Double: ExampleProtocol {
var simpleDescription: String {
return "The number \(self)"
}
mutating func adjust() {
if self < 0{
self = abs(self)
}
}
}
var number = -7.34
let protocolValue: ExampleProtocol = a
print(protocolValue.simpleDescription)
// Prints "A very simple class. Now 100% adjusted."
// print(protocolValue.anotherProperty) // Uncomment to see the error
Reference
この問題について(SWIFT TOURでSWIFT#7を学ぶ.Protocols and Extensions), 我々は、より多くの情報をここで見つけました https://velog.io/@yoogail/A-Swift-Tour로-Swift-공부하기-7.-Protocols-and-Extensionsテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol