У меня есть вопрос о быстрых и дженериках. То, что я пытаюсь сделать, это получить объект с общим типом. Но сначала я знаю тип во время выполнения. Но быстро добраться до места.Swift Generic с типом, известным во время выполнения
Новый отредактированный блок:
Может быть, я могу сделать это с именем класса? У меня есть имя класса в виде строки. Я получил его через зеркало. Могу ли я создать общий экземпляр с этим именем класса в строке?
let classname: String = "ClassA"
let firstA: a<classname> = a<classname>()
// ^^^^^^^^^ ^^^^^^^^^
// what to put here???
Новый конец отредактирован блок:
У меня есть два класса с общими типами:
Это протокол мой тип должен реализовывать:
protocol ToImplement {
func getTypeForKey(key: String) -> NSObject.Type
}
Это класс I для моего первого типа Тип:
class MyClass: ToImplement {
func getTypeForKey(key: String) -> NSObject.Type {
if key == "key1" {
return UIView.self
}
else {
return UIButton.self
}
}
}
это мой первый класс с универсального типа:
class a<T:ToImplement> {
func doSomethingWith(obj: T) -> T {
// the next part usually runs in an iteration and there can be
// a lot of different types from the getTypeForKey and the number
// of types is not known
let type = obj.getTypeForKey("key1")
let newA: a<type> = a<type>() // how could I do this? To create a type I do not know at the moment because it is a return value of the Object obj?
// ^^^^ ^^^^
// what to put here???
return obj
}
}
и это, как я хотел бы использовать его:
let mycls: MyClass = MyClass()
let firstA: a<MyClass> = a<MyClass>()
firstA.doSomethingWith(mycls)
Теперь мой вопрос: Могу ли я создать экземпляр класса а с типичным типом я получаю как возвращаемое значение функции? Возможно ли это?
Если это невозможно, как я могу создать экземпляр с общим типом из другого экземпляра. Что-то вроде:
let someA: a<instance.type> = a<instance.type>()
Благодарим за помощь!
С уважением
Артур
Привет, спасибо за ваш ответ, но я думаю, что это не то, что мне нужно. Представьте, что у меня есть классы под названием Car, Bike and House. они реализуют протокол «ToImplement».My MyClass возвращает один из таких типов, как Car, Bike, House или даже сам (MyClass). Теперь я хочу создать новый экземпляр a с таким типом, который был возвращен, но я не знаю его в это время. возможно, что-то вроде 'let newA = a()'. Я знаю, что это неправильно, но это именно то, что я пытаюсь сделать. –