在swift中创建一个共享类

时间:2016-04-15 17:14:14

标签: swift

在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之间的区别是变量类型或引用类型......

我会感激任何帮助。感谢

1 个答案:

答案 0 :(得分:0)

不幸的是,最好的办法是不要去做你想做的事情。您设计的架构似乎非常脆弱,两个独立的类不应该依赖于共享对象状态,如果它们这样做,它们应该通过类继承或协议来关联。

更好的解决方案是:

while(it.hasNext()){
    System.out.print(it.next().getA());
}

你应该采用这种方式做一些原因,而不是之前的解决方案:

  1. 您的共享状态可以保持对这两个类的私密性。这些类之外的任何人都不能或不应该修改该值。

  2. 单身模式虽然有时很有用,却有很多问题。 This article比我更好地解释了它。

  3. 您必须将您的应用程序和代码体系结构视为状态机,从一个状态转移到另一个状态。目标是编写可重用,模块化,通用且具有尽可能少的状态的代码。你的代码越无态,越好。这就是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怎么办?然后你有记忆问题。