[英]Could Swift create “OR” type for parameters?
为参数创建“ AND”类型很容易:
func test(item:(CVarArg&AnyObject))->String?{
return nil
}
如您所知,项目类型是CVarArg和AnyObject。
但是如何创建“ OR”类型以指示项目是CVarArg或AnyObject?
谢谢 :)
PS:我尝试了item:(item:(CVarArg | AnyObject))
但它不起作用!
我只想要CVarArg和AnyObject之间的限制项目类型,然后自己编码:
func test(item:(CVarArg|AnyObject))->String?{
if item is CVarArg {
// Do something for CVarArg
}else{
// Must be AnyObject,Do something ...
}
}
使用函数重载:
func test(item: CVarArg...) -> String? {
return "A"
}
func test(item: AnyObject) -> String? {
return "B"
}
你不能那样做。 Swift是一种静态类型的语言,在编译时,编译器必须使用您的类型。 如果您的类型可以是一回事或另一回事,则编译器不知道该如何解决。
想象一下,例如,您具有使用foo()
方法的类型A
和使用bar()
方法的类型B
如果您的项目是A or B
,那么编译器将如何在编译时解析对foo()
或bar()
的调用? 只是不能,因为不能保证您的类型可以实现任何一个。 我建议您使用两个单独的可选参数创建函数。 就像是:
func test(item: CVarArg?, other: AnyObject?)->String? {
return nil
}
然后,检查传递了哪些参数。 希望有帮助!
编辑
您还可以选择的另一种选择是将类型包装为枚举类型。 就像是:
enum Item {
case foo(CVarArg)
case bar(AnyObject)
}
func test(item: Item) {
switch item {
case .foo(let arg):
// arg is CVarArg
print(arg)
case .bar(let obj):
// obj is AnyObject
print(obj)
}
}
var arg: CVarArg!
test(item: .foo(arg))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.