我正在将应用程序从Swift转换为android。我在swift中使用了一个静态类来存储这样的一些数据。
class Model {
static let sharedModel = Model()
var email = ""
var password = ""
struct receipts {
var image = UIImage()
var currentDate = ""
}
var allreceipts = [receipts]()
在这种情况下,当我需要访问或添加数据时,我可以调用
Model.sharedModel.allreceipts.add(Image,"12/2/2017")
Model.sharedModel.allreceipts[1]
如何创建一个几乎与Java重复的类?
这是我在Java中试过的
public class Model {
static Model sharedModel = new Model();
class Receipts {
private Bitmap image;
private String currentDate = "";
}
Receipts[] allreceipts;
}
如何在Swift中使用Java做同样的事情,我可以从任何地方调用此类并访问它?
答案 0 :(得分:2)
几乎同样的事情:
allReceipts
但请注意:这通常不是良好模型所能做到的。如果有的话,你将使用一个Singleton - 并且你将有一个方法来返回该字段 - 并且那里的任何内容都不会是静态的(可能除了获取单例实例的方法之外)。
你知道 - 你对模型的想法导致了类之间的直接硬耦合。假设您想在此处更改某些内容 - 您可以更新正在使用它的所有类。
你放在这里与优秀的OO设计相反。你基本上是一个“全局”结构,然后程序必须直接访问。然后他们以不受控制的方式读/写。这就是25年前你用Pascal这样的命令式语言编写程序的方法。
良好的OOP是关于封装,信息隐藏,......
答案 1 :(得分:2)
你快到了!
public class Model {
public static Model sharedModel = new Model();
public static class Receipts {
private Bitmap image;
private String currentDate = "";
}
public Receipts[] allreceipts;
}
以上不是最佳实践,但它向您展示了Swift和Java的不同之处。首先,我在Swift internal
中创建了public
(没有访问修饰符)成员。这是因为Java中的默认访问级别为package
,与internal
略有不同。我还制作了Receipts
班public static
。在Java中,默认情况下内部类是非静态的,因此为了像这样访问它们:Model.Receipts
,它们必须是静态的。
现在让我们更改代码,使其遵循Java约定:
public class Model {
private static Model instance = new Model();
public static Model getInstance() {
return instance;
}
public Receipts[] getAllReceipts() {
return allreceipts;
}
public void setAllReceipts(Receipts[] allreceipts) {
this.allreceipts = allreceipts;
}
public static class Receipts {
private Bitmap image;
private String currentDate = "";
}
private Receipts[] allReceipts;
}
在Swift中,单例实例通常称为shared
,但在Java中我们通常将其称为instance
。
Java在Swift中缺乏酷炫的“属性”。您应该将所有成员变量设为私有,并为它们创建getter和setter方法。在这种情况下,sharedModel
声明为let
,因此它只会获得一个getter。 allReceipts
是var
,因此它同时包含一个getter和一个setter。