[解決済み] Swiftのプロトコルでletが使えないのはなぜですか?
質問
Swiftのプロトコルについて疑問があります。 var と keywords { get set } とする。 .
から アップルのドキュメント :
あるプロトコルで、あるプロパティがgettableとsetableであることが要求されている場合 定数保存されたプロパティや読み取り専用の計算されたプロパティでは満たすことができません。 や読み取り専用の計算されたプロパティでは満たすことができません。プロトコルが プロパティが取得可能であることのみを要求する場合、その要求はどのような種類のプロパティでも満たすことができます。 また、そのプロパティが設定可能であることも有効です。 これはあなた自身のコードのために有用であるなら、プロパティはまた設定可能であるために有効です。
プロパティ要件は常に変数プロパティとして宣言されます。 をプレフィックスとする変数プロパティとして宣言されます。取得可能なプロパティと設定可能なプロパティは 型宣言の後に { get set } と記述することで示されます。 gettableプロパティは{ get }と記述することで示される。
を使用できない理由がわかりません。 を使うのでしょうか? . A ヴァル だけで構成されるプロトコルで を得る だけではありません。 let ?
このようなものです。
protocol someProtocol
{
var someProperty: String { get }
}
というのは、正当なことではありません。
protocol someProtocol
{
let someProperty: String
}
何か見逃してる?
どのように解決するのですか?
"getだけのプロトコルのvarは、ただのletではないのですか?"。
いいえ、A
let
は定数を表します。しかし、ここではそうではありません。次のように考えてみましょう。
protocol SomeProtocol {
var someProperty: String { get }
}
class SomeClass : SomeProtocol {
var someProperty: String = ""
func cla () {
someProperty = "asd"
}
}
let someInstance = SomeClass()
print(someInstance.someProperty) // outputs ""
someInstance.cla()
print(someInstance.someProperty) // outputs "asd"
プロトコルは、適合するクラスが外部に見せるものを指定します。
String
という名前の
someProperty
という名前で
少なくとも
を得ることができます。
プロトコルで指定されている場合
{ get }
が指定されている場合、クラスは
let someProperty: String = ""
を通して適合させることができますが、同様に上記のコードを通して適合させることもできます。一方、プロトコルで
{ get set }
は使えません。
let
を実装することはできませんが、同様に設定可能にする必要があります。
プロトコルは、値が一定でなければならないと単純に定義することはできません。それは実装の詳細であり、それを実装するクラス/構造体によって注意(または決定)されなければなりません。
関連
-
[解決済み] performSelectorのセレクタが不明なため、リークが発生する可能性があります。
-
[解決済み] SwiftからObjective-Cのコードを呼び出すにはどうしたらいいですか?
-
[解決済み] Swiftで#pragmaマーク?
-
[解決済み] Swift Betaのパフォーマンス:配列のソート
-
[解決済み] SwiftでStringを配列に分割する?
-
[解決済み] 純粋な」Swift で弱いプロトコル参照を作るには (@objc なしで) どうしたらいいですか?
-
[解決済み] UITextViewのマージン/パディングをなくす方法
-
[解決済み] UIViewの左上と右上だけにcornerRadiusを設定する方法は?
-
[解決済み] Swift 3でディスパッチキューを作成する方法
-
[解決済み] Swiftのプロトコルでオプションのメソッドを定義するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] キーボードがあるときに、UITextFieldを編集開始時に上に移動させるには?
-
[解決済み] UITableViewの下にある余分なセパレータをなくす
-
[解決済み] Objective-Cで文字列が空かどうかをテストするにはどうすればよいですか?
-
[解決済み] Xcode 12、iOS Simulator用にビルドしても、iOS用にビルドされたオブジェクトファイルでは、アーキテクチャ「arm64」用にリンクされます。
-
[解決済み] フレームワークを使用したiOSアプリがデバイス上でクラッシュ、dyld: ライブラリがロードされない、Xcode 6 Beta
-
[解決済み] UITextViewのマージン/パディングをなくす方法
-
[解決済み] UIButtonのタイトルを左揃えにするにはどうしたらよいですか?
-
[解決済み] アプリのプレビュー用にiOSシミュレータのビデオをキャプチャー
-
[解決済み] SwiftでURLから画像を読み込む/ダウンロードする
-
[解決済み] UILabelで複数行のテキストを表示する