在swift中,无论如何我可以创建共享类吗?也就是说,有一个名为Value的类:
final ViewSwitcher viewSwitcher = (ViewSwitcher) findViewById(R.id.viewSwitcher);
final View btn = viewSwitcher.findViewById(R.id.address_btn);
final View title = viewSwitcher.findViewById(R.id.address_value);
title.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
viewSwitcher.showPrevious();
btn.requestFocus();
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(btn, InputMethodManager.SHOW_IMPLICIT);
}
});
// EditText affiche le titre evenement click
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
btn.clearFocus();
viewSwitcher.showNext();
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(btn.getWindowToken(), 0);
// Enregistre l'adresse.
addAddress(view);
}
});
我想在不同的对象实例之间共享此类。 例如,
class Value{
var a = 0
}
我在var a上尝试过static,但是后来它不允许我做像算术这样的算术......但是如果我将Value改为static而不是class,它就可以工作了。我认为只有struct和class之间的区别是变量类型或引用类型......
我会感激任何帮助。感谢
答案 0 :(得分:0)
不幸的是,最好的办法是不要去做你想做的事情。您设计的架构似乎非常脆弱,两个独立的类不应该依赖于共享对象状态,如果它们这样做,它们应该通过类继承或协议来关联。
更好的解决方案是:
while(it.hasNext()){
System.out.print(it.next().getA());
}
你应该采用这种方式做一些原因,而不是之前的解决方案:
您的共享状态可以保持对这两个类的私密性。这些类之外的任何人都不能或不应该修改该值。
单身模式虽然有时很有用,却有很多问题。 This article比我更好地解释了它。
您必须将您的应用程序和代码体系结构视为状态机,从一个状态转移到另一个状态。目标是编写可重用,模块化,通用且具有尽可能少的状态的代码。你的代码越无态,越好。这就是ReactJS和ReactiveCocoa等平台背后的整个想法;它们有助于简化应用程序状态。
您可能正在寻找的是数据持久性,例如Realm或CoreData,您可以将数据保存到磁盘,然后您可以根据需要在以后将其读回。例如,假设您的共享状态不是class MyClass {
static var a = 0
}
class SubclassA: MyClass {
func someFunc() {
print(self.dynamicType.a)
self.dynamicType.a += 1
}
}
class SubclassB: MyClass {
func otherFunc() {
print(self.dynamicType.a)
}
}
,而是Int
的数组。使用单例模式,您可以随时将这些图像保存在内存中。如果列表长度增加到200或300怎么办?然后你有记忆问题。