我有一个结构体,在这个结构中,我有变量,我希望它是UITextField
UIButton
的任何类型private struct ValidationObject {
var textField: RITextFieldLine
...
}
。我想我可以用某种方式使用泛型。
所以,我的代码看起来像这样
textField
类型为RITextFieldLine
的 MongoClient mongoClient = new MongoClient("localhost",27017);
MongoDatabase database = mongoClient.getDatabase("Test");
MongoCollection<Document> collection = database.getCollection("History");
Document doc = new Document();
doc.append("$match",new Document("thId","001"));
Document group = new Document();
group.append("$group", new Document("_id",new Document().append("Id", "$Id").append("controller", "$controller").append("mod" , "$mod").append("variable" , "$variable"))
.append("variable" , new Document("$first", "$$ROOT"))
.append("data",new Document().append("$push", new Document().append("value", "$value").append("updatedDateTime","$updatedTime"))));
ArrayList<Document> docList = new ArrayList<Document>();
docList.add(doc);
docList.add(group);
List<Document> results =collection.aggregate(docList).into(new ArrayList<Document>());
for(Document res: results){
System.out.println(res.toJson());
}
变量是我的自定义视图。但我不希望它属于这种特定类型。
答案 0 :(得分:2)
我建议您使用协议来定义Validateable
。然后,您可以通过扩展名将此协议应用于任何所需的类:
protocol Validateable {}
extension UITextField: Validateable {}
extension UIButton: Validateable {}
extension AnyOtherTypeYouLike: Validateable {}
然后你可以在你的struct
中使用它private struct ValidationObject {
var validationItem: Validateable
...
}
您还可以使用该协议来定义应由Validateable
对象实现的任何函数以及实现它们的扩展。
答案 1 :(得分:0)
如果你要分配的只是视图元素,那么:
private struct ValidationObject {
var textField: UIView
...
}
否则:
private struct ValidationObject {
var textField: Any
...
}
考虑到你的属性命名(textField),我会说第一个。只要记住在想要将变量用作特定类型时使用它:
if let textField = validationObjectInstance.textField as? RITextFieldLine {
textField.someMethodOrProperty
}