当前位置: 首页 > 知识库问答 >
问题:

在 Swift 中创建共享类

赏新知
2023-03-14

在 swift 中,我是否可以创建共享类?也就是说,假设有一个名为 Value 的类:

class Value{
  var a = 0
}

我想使用这个类在不同的对象实例之间共享。举个例子,

class Main{
  func main(){
    print(Value.a)
    Value.a++
  }
}

class OtherClass{
  func otherMain(){
    print(Value.a)
    Value.a++
  }
}


let main = Main()
let other = OtherClass()
//I want this call to print 0
main.main()
//I want this call to print 1
other.otherMain()

我尝试了在var a上静态,但后来它不会让我做诸如加法之类的算术......但是,如果我将值更改为静态而不是类,它正在起作用。我认为结构和类之间唯一的区别是变量类型或引用类型...

我会感激任何帮助。谢谢

共有1个答案

史劲
2023-03-14

不幸的是,做你想做的事情的最好方法就是根本不做。看起来你正在设计的架构非常脆弱,两个独立的类不应该依赖于共享对象状态,如果它们依赖于共享对象状态,它们应该通过类继承或协议进行关联。

更好的解决方案是:

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)
    }
}

与之前的解决方案相比,有几个原因让您应该这样做:

>

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

    单例模式虽然有时很有用,但存在一系列问题。这篇文章比我更好地解释了它。

    你必须把你的应用程序和你的代码架构想象成一个状态机,从一个状态转移到另一个状态。目标是编写可重用的、模块化的、通用的代码,并且具有尽可能少的状态。你的代码越无状态越好。这就是ReactJS和ReactiveCocoa等平台背后的全部理念;它们有助于简化应用程序状态。

    您可能需要的是数据持久性,类似Realm或CoreData,在这里您可以将数据持久化到磁盘,然后可以根据需要在稍后的时间将其读回。例如,想象一下,您的共享状态不是Int,而是一个UIImages的数组。使用单例模式,您可以随时将这些图像保存在内存中。如果列表长度增加到200或300,该怎么办?然后你有内存问题。

  •  类似资料:
    • 问题内容: 我是新手,并不熟悉Objective-C。有人可以帮我将其转换为Swift吗?我得到这个代码雷Wenderlich最好的iOS做法-http://www.raywenderlich.com/31166/25-ios-app-performance-tips- tricks 您会将代码放在哪里?它将放入充满全局变量的类文件中吗? 问题答案: 如果您确实要寻找问题中方法的直接模拟,则可以执

    • 问题内容: 这是推特的一些代码和平…我想知道如何像在iOS堆栈照片应用程序中一样获得共享操作视图… 问题答案:

    • 问题内容: 即使对于基于文件的存储,也不希望其他人打开进程中的HSQLDB数据库。 该文档提示这是可能的:服务器模式,高级主题,但是我还没有找到有关如何激活此行为的URL。 有没有人这样做,以便他们可以共享方法? 问题答案: 以下对我有用: 从您的代码启动服务器,该代码显示在HSQLDB源代码的org.hsqldb.test.TestBase代码中。就像是: 在同一个JVM中,以与普通(非服务器)

    • 当我运行下面的代码时,它取自:https://developers.google.com/drive/api/v3/manage-shareddrives#python 我得到“用户对此文件没有足够的权限”如果我创建文件、列出共享驱动器或其他任何东西,都不会发生这种情况。除了['https://www.googleapis.com/auth/drive']. 需要注意的是,我使用的是服务号。服务帐

    • 我的环境: SQL Server 2012 BI版 本地开发机器 共享网络文件夹和驱动器 null 我试过什么: WorkingDirectory:本地驱动器-解决方案有效 WorkingDirectory:共享文件夹-解决方案不会失败,但不会创建文件。我的帐户对该文件夹具有完全权限。 WorkingDirectory:映射驱动器使用Net USE,但未创建文件。 我已经部署了解决方案并运行了SQ

    • 问题内容: 我正在使用“线程”模块在Python中进行项目。 如何创建一个全局变量(在我的情况下,我需要为True或False),以便项目中的所有线程(大约4-6)都可以访问? 问题答案: 我们可以在线程类外部定义变量,并在类的方法内部全局声明它。 请参见下面的简单示例,它交替打印AB。两个变量和在两个线程和之间共享。打印,然后设置为30。打印,因为已在中进行了修改。然后设置为20,再次用于中。这