在Swift中对许多函数进行分组

时间:2014-11-19 23:21:16

标签: swift

我有一个概念性的Animal API客户端类,它将与下面的Rest Api连接(它可能有语法错误,我正在从头脑中输入它)。

class AnimalApi {   
  let connectionInfo: ApiConnectionInfo

  init(connectionInfo: ApiConnectionInfo) {
    self.connectionInfo = connectionInfo
  }

  func login(username: String, password: String) {
    // login stuff
  }

  func logout() {
    // logout stuff
  }

  func get(url: String) {

  }

  func post(url: String) {

  }

  func delete(url: String) {

  }
}

// Dogs
extension AnimalApi {
  func getAllDogs() -> Dogs {
    return get("dogResourceUrl")
  }
  func deleteDog() { }
  func updateDog() { }
}

// Cats
extension AnimalApi {
  func getAllCats() { }
  func deleteCat() { }
  func updateCat() { }
}

有没有更好的方法在Swift中分组代码而不是使用扩展?我必须调用的许多API资源都位于同一个API服务器上。我试图避免以下......

let api = AnimalApi()
let dogs = api. // bombarded with all functions here, ideally something like api.Dogs.getAll would be more manageable

我意识到Apple使用扩展程序将他们的代码分组到他们的Swift API中,但是有更好的方法吗?子类可能吗?

编辑:如果可能,我想避免使用子类。这是因为我计划拥有AnimalApi的单个全局实例,因为它将在整个应用程序中不断访问。也许使AnimalAPi成员是静态的,并且具有包含调用静态AnimalApi的函数的静态成员的单独类。

class DogApi {
    class func all() { return AnimalApi.get("dogResourceUri") }
}

let dogs = DogApi.all()

1 个答案:

答案 0 :(得分:1)

以下示例代码是尝试完成您的要求。 希望它有所帮助。

typealias Task = () -> ()

typealias Api = (getAll: Task, delete: Task, update: Task)

class AnimalApi {

    let dogs: Api = {
        func getAll() { }
        func delete() { }
        func update() { }
        return (getAll, delete, update)
    }()

    let cats: Api = {
        func getAll() { }
        func delete() { }
        func update() { }
        return (getAll, delete, update)
    }()
}

现在,您可以在应用程序的任何位置使用它,而不会受到所有不同功能的轰炸:

let api = AnimalApi()
let dogs = api.dogs.getAll