簡體   English   中英

如何聲明自類型的變量?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM