Theater 0.13

Theater 0.13

测试已测试
语言语言 SwiftSwift
许可证 Apache-2.0
发布日期最新发布2020年12月
SPM支持SPM

Dario Talarico维护。




Theater 0.13

Theater:iOSActor模型框架

Build Status Pod Version

编写异步、健壮和响应式的应用程序太难了。

在iOS的情况下,是因为我们使用错误的抽象级别:NSOperationQueues、dispatch_semaphore_create、dispatch_semaphore_wait以及其他低级别的GCD函数和结构。

使用Actor模型,我们提高了抽象级别,并为构建正确的并发和可伸缩的应用程序提供了一个更好的平台。

Theater是开源的,并使用Apache 2许可证。

Theater深受Akka的启发。

Twitter = @TheaterFwk

如何开始

pod 'Theater'

Actor应该继承自Actor类

  public class Dude : Actor {

为了“监听”消息,Actor需要重写receive方法

  override public func receive(msg : Message) -> Void {

  }

为了解包消息,可以使用switch语句

override public func receive(msg : Message) -> Void {
  switch (msg) {
    case let m as Hi:
      m.sender! ! Hello(sender: self.this)
    case is Hello:
      print("got Hello")
    default:
      print("what?")
  }
}

所有消息都必须继承自Message

public class Hi : Message {}
 
public class Hello : Message {}

Actor生活在actor系统中,Theater提供了一个默认的系统

  let system : ActorSystem = AppActorSystem.shared

整合在一起

import Theater
 
public class Hi : Message {}
 
public class Hello : Message {}
 
public class Dude : Actor {
    override public func receive(msg : Message) -> Void {
        switch (msg) {
            case let m as Hi:
                m.sender! ! Hello(sender: self.this)
            case is Hello:
                print("got Hello")
            default:
                print("what?")
        }
    }
}

.
.
.
(inside the app delegate)

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        
        let system : ActorSystem = AppActorSystem.shared
        
        let dude1 = system.actorOf(Dude.self, name: "dude1")
        let dude2 = system.actorOf(Dude.self, name: "dude2")
        
        dude2 ! Hi(sender : dude1)

输出将是

Tell = Optional("dude1") <Actors.Hi: 0x7bf951a0> dude2 
Tell = Optional("dude2") <Actors.Hello: 0x7be4bc00> dude1 
got Hello