我正在尝试将字符串从一个视图控制器传输到另一个视图控制器。我遇到的问题是需要将字符串'设置为任何对象'。
我在下面的代码在控制台中返回一个nil。有没有办法将数据作为字符串发送到VC?提前谢谢。
在MainVc中 -
func contextForSegueWithIdentifier(segueIdentifier: String) -> AnyObject? {
// You may want to set the context's identifier in Interface Builder and check it here to make sure you're returning data at the proper times
// Return data to be accessed in ResultsController
var currentValue = "Hellooo"
return currentValue as String as AnyObject
}
收到VC。
override func awake(withContext context: Any?) {
super.awake(withContext: context)
if let val: Any = context as? Any {
print(val)
} else {
print("An error occurred")
} // Configure interface objects here.
}
输出只是零。
答案 0 :(得分:1)
首先currentValue as String
无效,currentValue
已经是String
。
其次,将val
再次投射到Any
毫无意义,因为val
已经是非显式类型Any
。您应该将其条件转换为String
,因为您期望String
变量。
对于这么简单的情况,我不会使用' contextForSegueWithIdentifier'我只想使用presentController(withName:context:)
或pushController(withName:context:)
。
使用这些你不需要进行任何演员,你只需presentController(withName: "MyContoller", context: "Hello")
。
答案 1 :(得分:0)
我遇到了同样的问题。解决方案就像Larme建议的那样,使用了适当的swift 3或4函数,在这种情况下,我假设您尝试使用此代码
覆盖func contextForSegueWithIdentifier(segueIdentifier:String) - > AnyObject? {
但编译器建议不必重写,因为Method不会覆盖其超类中的任何方法
简单的解决方案是删除覆盖。应用程序编译,但从不调度contextForSegue函数。
正确的结构如下:
覆盖func contextForSegue(withIdentifier segueIdentifier:String) - >任何? {