Передайте runtimeType в качестве параметра универсальной функции - PullRequest
0 голосов
/ 14 мая 2018

Я разработчик Swift и новичок в 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)

Дарт, могу ли я привести тип универсального класса? как <T: Mappable> в Swift?

Является ли runtimeType в дротике эквивалентным <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

1 Ответ

0 голосов
/ 18 мая 2018

runtimeType в Dart - это значение типа Type, которое отличается от того, что происходит, когда вы пишете тип в параметре универсального типа.

Например, new List<String>() допустимо, но new List<''.runtimeType>() - синтаксическая ошибка.

Как правило, Type довольно ограничен. Вы не можете использовать его для создания новых экземпляров - если только вы не находитесь в виртуальной машине, где вы можете использовать зеркала.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...