[英]In Swift, how can I declare a variable of a specific type that conforms to one or more protocols?
[英]How can I declare a variable of self type?
考慮以下構造函數示例:
+ (instancetype)widgetWithTitle:(NSString *)title
{
Widget* widget = [[self alloc] init];
widget.title = title;
return widget;
}
假設我要動態推斷類型,因此當使用此構造函數調用我的子類時,它們將返回WidgetSubclass*
而不是Widget*
。
我對typeOf(self) widget = [[self alloc] init]
期望typeOf(self) widget = [[self alloc] init]
引發編譯器警告。 因此,如何要求編譯器創建指向正在調用的任何類型的指針,而不是此硬編碼超類類型的指針? 注意,我意識到我可以創建一個initWithTitle:
方法,只返回[[self alloc] initWithTitle:title]
,這不是重點。 還要注意,我意識到這實際上並不會妨礙子類中的任何操作設置,只是為了理想起見。
-編輯-
由於這個問題沒有得到熱烈的歡迎,我應該澄清我的意圖。 目的只是看是否有一個編譯時typeOf
機制,可以用來聲明當前上下文類型的對象(相當於[self class]
的編譯時)。 認為instancetype objectOfMyOwnKind = ...
或typeOf(self) anObjectLikeMe = [self copy]
東西。
這不一定是實際應用。 純粹出於好奇。 毫無疑問如何實現適當的構造函數,對於構造函數是紅色鯡魚,我深表歉意。
...我想動態地推斷類型,因此當我的子類用此構造函數調用時,它們將返回
WidgetSubclass*
而不是Widget*
。
他們已經這樣做了,因為那是instancetype
意思:返回消息類的實例。
無需“動態鍵入”此變量。*為什么?
不需要,因為超類(定義此方法) 不應該對其子類有特定的了解。 鍵入指向子類的指針的唯一原因是使用特定於子類的方法。 充其量是個糟糕的主意。
由於沒有必要,因此無法執行您要問的事情。
超類是此變量的有效和正確的類型。 如果要使用更通用的類型,則必須使用id
。
*或任何其他變量(在超類的方法中)指向當前類的實例。
誰對此問題投反對票,應考慮他們是否真正理解所要提出的問題。
這可能為您解決問題:
BaseClass *instance;
instance = [[self class] new];
instance.title = @"...";
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.