为参数创建“AND”类型很容易:
func test(item:(CVarArg&AnyObject))->String?{
return nil
}
如您所知,项目类型为CVarArg和AnyObject。
但如何创建“OR”类型来表示项目是CVarArg或AnyObject ???
谢谢 :)
PS:我试过了项目:(项目:(CVarArg | AnyObject))
但它不起作用!
我只想在CVarArg和AnyObject之间使用限制项的类型,然后自己编码:
func test(item:(CVarArg|AnyObject))->String?{
if item is CVarArg {
// Do something for CVarArg
}else{
// Must be AnyObject,Do something ...
}
}
你不能这样做。 Swift是一种静态类型语言,在编译时编译器必须符合您的类型。如果您的类型可以是一个或另一个,编译器不知道如何解决它。
想象一下,例如,您使用方法A
键入foo()
,使用B
方法键入bar()
。如果你的项目是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))
使用函数重载:
func test(item: CVarArg...) -> String? {
return "A"
}
func test(item: AnyObject) -> String? {
return "B"
}