2016-02-02 21 views
1

我有应该返回StringArray的函数:函数应返回字符串或阵列

func someFunc(isList:Bool=false) -> AnyObject { 
     if isList { 
      var results:[AnyObject] = [11, "123", [], "22"] 
      return results 
     } else { 
      var result = "123" 
      return result 
     } 
    } 

但是编译器表示:式

返回表达“[AnyObject]”不符合 'AnyObject'

+0

为什么不总是返回一个数组,但是当你的'isList'是假的,返回只有在一个字符串数组?或者,为什么不把return变量设置为可选项,并在某些情况下返回'nil',因为它看起来并不像实际上使用返回字符串。 – Hamish

+0

是的,这是一个解决方案,但它有可能返回我想要的? – Arti

+0

不,我不能返回零,因为字符串可以包含一些值 – Arti

回答

1

您的结果变量需要是AnyObject类型而不是[AnyObject]。基本上,你需要AnyObjects的阵列转换为单AnyObject

func someFunc(isList:Bool=false) -> AnyObject { 
    if isList { 
     var results: AnyObject = [11, "123", [], "22"] 
     return results 
    } else { 
     var result = "123" 
     return result 
    } 
} 
0

“AnyObject”是任何对象。 [AnyObject]是一个数组,数组是数值,而不是对象。而你试图返回的另一个值是一个字符串,它也是一个值,而不是一个对象。

你的函数应该返回Any,或者更好的情况是枚举两个case,一个case [Any]和一个case String。

0

你可以让它返回任何?

func something(list: Bool = false) -> Any { 
    if list { 
    return [11, "123", [], "22"] 
    } else { 
    return "123" 
    } 
} 

let result = something(true) 
let result0 = something(false) 

任何可以表示任何类型的实例,包括函数类型。

苹果文档建议不要以这种方式使用任何协议。

注:使用任何和AnyObject只有当你明确需要的行为和能力,他们提供的。对代码中期望使用的类型进行具体说明总是更好。

Apple Reference