无法将数组传递给performSegueWithIdentifier

时间:2015-10-12 17:12:06

标签: ios arrays swift2

我想通过performSegueWithIdentifier(self.segueName, sender: products)

传递一个名为[Product]类型的产品的数组

我想在sender

prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?)参数中接收数组

但是,这不会编译:{{1​​}}

为什么我要这样做?只是因为我想避免在我的Controller类中为此目的添加一个全局变量。

我怎样才能做到这一点?

我试图事先将数组转换为Cannot convert value of type '[Product]' to expected argument type 'AnyObject?'。此解决方案会进行编译,但AnyObject函数中sender参数中的结果值包含prapareForSegue

nil

2 个答案:

答案 0 :(得分:2)

直接来自Swift编程语言参考:

  

作为? downcast运算符的版本返回协议类型的可选值,如果实例不符合该协议,则此值为nil。

因此,如果您获得的值为nil,则表示[Product]不符合预期的AnyObject?协议,因为[Product]是一个数组(请参阅此处:{{3} })。

你可以做的是NSArray的类型[Product],因为那是一个符合AnyObject的对象?

self.performSegueWithIdentifier(self.segueName, sender: (products as NSArray) as? AnyObject)

在此处查看更多信息:Structures as AnyObject

让我知道它是怎么回事!祝你好运!

答案 1 :(得分:0)

真正的问题是我已将我的Product实体声明为结构而不是类。这样就无法将数组作为AnyObject处理。

使用某个类允许我将var err = function err(jqxhr, textStatus, errorThrown) { console.log(errorThrown) } $.ajax({ url: "dofirstthing.do", jsonp: false, type: "GET", dataType: "JSON", statusCode: { 200: function() { global.location.search = param1; $.get("/url?" + "param1=" + global.location.search) .then(function() { $.get("/url?" + "param2=" + param2).then(null, err) }, err) } } }); 传递给[Product]而不进行任何类型转换,并使用performSegueWithIdentifier

再次成功转换接收的参数