Swift API设计中的选项



我正在创建一个新的API,以便在我的应用程序中使用。Swift API指南中没有提到期权。

我对API进行了结构化,以接受一种格式的数据,并以另一种格式返回数据,以便在创建时使用。即

func createMyDataFromYourData(data: YourData?) -> MyData? {}

该函数检查数据是否为零,然后进行适当的处理。写完这篇文章后,我突然想到API应该只处理非选项,用户应该在通过之前检查nil。我们决定好规则了吗?

对此没有"规则"。这取决于你的应用程序的工作方式。在您的情况下,您正试图创建一个MyData对象,所以我建议您改为:

class MyData {
convenience init?(data: YourData?) {
guard let data = data else { return nil }
self.init()
// Do whatever with data
}
}

这样,当你这样调用时,很明显你正在创建一个新对象

let obj = MyData(data: yourDataObject)

obj本身是一个可以为null的对象。如果YourData为null,也有可能创建一个MyData对象,因此在这种情况下,您不会使其为null。

实际上不可能有任何关于这方面的通用规则。这取决于您的用例。我想说的是,一个很好的经验法则是根据您当前的需求设计您的API,否则您可能会过度设计实际上并没有那么复杂的东西。

作为一个(有些人为的)例子,您可以有以下两个要求:

  1. 从Ints:数组返回素数数组的函数

    func primeNumberFromIntegers(integers: [Int]) -> [Int] {
    // implementation goes here
    }
    

如果您知道您将总是想要迭代返回的任何数字,那么使用可选的返回值是没有意义的,而是让函数返回一个空数组。

  1. 您可能需要一个函数来从Ints数组中返回最高可用素数,这可能更有意义:

    func highestPrimeNumberFromIntegers(integers: [Int]) -> Int? {
    //Implementation
    }
    

为什么是可选的?因为您在中发送的Int数组可能,也可能不包含任何素数。如果不存在素数,则唯一可感知的返回值为零。

最新更新