我是Swift开发人员,是Dart的新手。我正在尝试编写一些通用方法。
我想知道我是否可以在Dart中实现类似的目标。
//Swift version
public func modelFrom<T: Mappable>(response: Encodable?, model: T.Type) -> T? {
if let response = response, let string = response.jsonString {
return T(JSONString: string)
}
return nil
}
// The method can be called like this
let responseModel = modelFrom(response: response, model: FoodLogModel.self)
对于Dart,我可以转换泛型类的类型吗?像Swift中的
<T: Mappable>
吗?Dart中的
runtimeType
是否等效于Swift中的<ClassName>.self
?非常感谢
这是我尝试过的
import 'package:dartson/dartson.dart';
import 'package:mobile_corelib/base/model.dart';
T requestFrom<T>(BaseModel model, Type T) {
try {
var dson = new Dartson.JSON();
var object = dson.map(dson.encode(model), T.runtimeType);
return object;
} catch(error) {
return null;
}
}
var dick = requestFrom(model, AccessTokenRequest().runtimeType)
但是我不知道如何传递
Class type
。我应该使用dynamic
吗?或Type
最佳答案
Dart中的runtimeType
是Type
类型的值,这与在通用类型参数中编写类型时发生的事情不同。
例如,new List<String>()
有效,但是new List<''.runtimeType>()
是语法错误。
通常,Type
非常有限。您不能使用它来创建新实例-除非您在VM中,您可以在其中使用镜像。
关于swift - 传递runtimeType作为通用函数参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50326435/