2015-06-11 124 views
0

協議和類名在Ojective-C對象初始化我寫道:在迅速

id <MyProtocol> object = [[NSClassFromString(@"aClassName") alloc] initWithObject:obj]; 

我想斯威夫特來寫這個。

有沒有做同樣的事情還是我脫離了語言範式?

編輯:

這是我的背景。 某處我有:

- (instancetype)initWithObject:(NSArray *)array andClassName:(NSString *)className { 
    self = [self initWithClassName:className]; 
    if(self) { 
     _members = [[NSMutableArray alloc] init]; 
     for(id obj in array) { 
      id <MyProtocol> object = [[NSClassFromString(className) alloc] initWithObject:obj]; 
      [_members addObject:object]; 
     }; 
    } 
    return self; 
} 
+0

你爲什麼使用'NSClassFromString'? Swift是一種強類型語言。你爲什麼要按名稱使用課程?請提供有關您的代碼的更多信息。 – Sulthan

+0

我正在使用不知道其他應用程序類的構造類。我告訴這個類:「好了,現在你將用這個對象實例化,並且你將包含這種類型的對象,就像UITableView一樣,你可以通過給這個類註冊你的單元格 – Pierre

+0

而不是給它起個名字這個類,你爲什麼不直接給它類('Class')?這可以很容易地轉換成Swift類型,或者它對泛型有很好的用處?沒有代碼,很難判斷。 – Sulthan

回答

0

在Swift中,您將需要一個通用類。

你的類將有一個通用型<T : MyProtocol>members[T]類型的,你可以使用T創建新實例。

您不需要通過className作爲參數。

+0

Thx爲您的答案 – Pierre

1

爲了讓您在該類上調用該初始化程序,您需要知道該類支持該初始化程序。因此,讓由MyProtocol協議所需的初始化:

protocol MyProtocol { 
    init(object: AnyObject) 
} 

然後你可以做NSClassFromString,然後將結果轉換爲MyProtocol.Type(斷言類是MyProtocol亞型),它允許您使用你想要的初始值設定項:

let object = (NSClassFromString(className) as! MyProtocol.Type)(object: obj)