我正在创建一个在我的应用中使用的新API。 Swift API指南未提及可选项。
我已经构建了我的API,以接受一种格式的数据,并以另一种格式返回,以便在创建中使用。即
func createMyDataFromYourData(data: YourData?) -> MyData? {}
该函数检查数据是否为零,并进行适当的处理。在写完之后,我发现API应该只处理非选项,用户应该在传递之前检查nil。我们决定了一条规则吗?
答案 0 :(得分:2)
不是"规则"为了这。这取决于您的应用的运作方式。在您的情况下,您正在尝试创建一个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本身就是一个可以为空的对象。如果YourData为nil,你仍然可以创建一个MyData对象,所以在这种情况下你不能让它可以为空。
答案 1 :(得分:0)
这取决于您的使用案例。我说一个好的经验法则是根据您当前的需求设计您的API,否则您可能会过度设计那些实际上并不复杂的事情。
作为一个(有点人为的)例子,你可以举例说明以下两个要求:
从Ints数组中返回素数数组的函数:
$query="INSERT INTO tbl_test SET name='abc'";
如果您知道您总是希望迭代返回的任何数字,那么就没有可选的返回值,而是让函数返回一个空数组。
您可能需要一个函数从Ints数组中返回最高可用的素数,这可能更有意义:
INSERT INTO
为什么选择?因为您在中发送的Ints数组可能或不包含任何素数。如果不存在素数,则唯一的敏感返回值为nil。