【发布时间】:2019-05-06 20:46:42
【问题描述】:
我有一个反对意见,我想知道是否有一种简单的方法可以遍历它的键和值?
class Post {
String id;
String title;
String article;
Post(
{
this.id,
this.title,
this.article
}
);
}
【问题讨论】:
我有一个反对意见,我想知道是否有一种简单的方法可以遍历它的键和值?
class Post {
String id;
String title;
String article;
Post(
{
this.id,
this.title,
this.article
}
);
}
【问题讨论】:
你也可以使用吸气剂吗?它要求您设置所有字段一次,但之后,您可以调用完整的字段列表并对其进行迭代。
class Person{
final String _firstName;
final String _secondName;
Person(this._firstName,this._secondName);
String get hisName{
return _firstName;
}
}
class Player extends Person{
final int _shirtNumber;
Player(String _firstName,String _secondName,this._shirtNumber) : super(_firstName, _secondName);
List get everything{
final stuff=[_firstName,_secondName,_shirtNumber];
return stuff;
}
}
void main(List<String> arguments) {
final foo = Player('David','Beckham',7);
print(foo.everything);
for (final blah in foo.everything){
print(blah);
}
}
【讨论】:
这几乎每天都困扰着我。这也是 Dart 的 web 端的一个问题。 在我看来,这是 Dart 的主要缺点之一......
但是 - 这是我的解决方案。我正在为这些“可序列化”类使用接口类。
abstract class JsonTO {
Map<String, dynamic> toJson();
}
class Device implements JsonTO {
Map<String, dynamic> toJson() {
return ... Your serialization thing
}
}
main() {
final device = Device();
final json = device.toJson();
json.forEach((final String key, final value) {
_logger.info("Key: {{$key}} -> value: ${value}");
// do with this info whatever you want
});
}
【讨论】:
没有。
您要求的是反思。如果库在您的平台上可用(它不在 Flutter 中),您可以为此使用 dart:mirrors API。
您可以使用package:reflectable 为其生成代码。
或者您可以使用package:json_serializable 从对象生成Map。
如果你只是想为一个特定的班级做点什么,我只是手动
写:
dart
Map<String, dynamic> toJson() => {"id": id, "title": title, "article": article};
然后在你想迭代时使用它。
【讨论】:
你所要做的就是为你拥有所有属性的对象命名,例如
var object = { this.id,
this.title,
this.article }
for (var property in object) {
if (object.hasOwnProperty(property)) {
// do stuff
}
}
【讨论】: