Как передать тип Swift как аргумент метода? Я хотел бы сделать что-то вроде этого: func doSomething(a: AnyObject, myType: ????) { if let a = a as? myType { //… } } В Objective-C классом класса был Class Ответ 1 Вы должны использовать общую функцию, в которой параметр используется только для информации о типе, поэтому вы передаете ее в T: func doSomething<T>(_ a: Any, myType: T.Type) { if let a = a as? T { //… } } // usage doSomething("Hello World", myType: String.self) Используя инициализатор типа T Вы не знаете подпись T вообще, потому что T может быть любым типом. Таким образом, вы должны указать подпись в протоколе. Например: protocol IntInitializable { init(value: Int) } С помощью этого протокола вы могли бы написать func numberFactory<T: IntInitializable>(value: Int, numberType: T.Type) -> T { return T.init(value: value) } // usage numberFactory(value: 4, numberType: MyNumber.self)
Ответ 1 Вы должны использовать общую функцию, в которой параметр используется только для информации о типе, поэтому вы передаете ее в T: func doSomething<T>(_ a: Any, myType: T.Type) { if let a = a as? T { //… } } // usage doSomething("Hello World", myType: String.self) Используя инициализатор типа T Вы не знаете подпись T вообще, потому что T может быть любым типом. Таким образом, вы должны указать подпись в протоколе. Например: protocol IntInitializable { init(value: Int) } С помощью этого протокола вы могли бы написать func numberFactory<T: IntInitializable>(value: Int, numberType: T.Type) -> T { return T.init(value: value) } // usage numberFactory(value: 4, numberType: MyNumber.self)