UIStoryBoardSegue 方法的 iOS Swift 问题
Posted
技术标签:
【中文标题】UIStoryBoardSegue 方法的 iOS Swift 问题【英文标题】:iOS Swift issue with UIStoryBoardSegue method 【发布时间】:2014-06-08 00:26:24 【问题描述】:我正在尝试将 Objective-C 方法转换为 Swift。
Objective-C方法如下:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
if ([[segue identifier] isEqualToString:@"showDetail"])
NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
NSString *string = [feeds[indexPath.row] objectForKey: @"link"];
string = [string stringByReplacingOccurrencesOfString:@"\n" withString:@" "];
[[segue destinationViewController] setUrl:string];
到目前为止我得到的 Swift 方法(有问题)如下:
override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!)
if (segue.identifier == "showDetail")
var indexPath:NSIndexPath = self.tableView.indexPathForSelectedRow()
var string:NSString = self.feeds[indexPath.row] as String
string = string.stringByReplacingOccurrencesOfString("\n", withString: "")
segue.destinationViewController.setURL(string, forKey: nil)
主要问题在于最后一行:
segue.destinationViewController.setURL(string, forKey: nil)
我收到以下错误:
“无法将表达式的类型 'Void' 转换为类型 'NSURL!'”
这是我要调用的控制器:
import UIKit
class DetailViewController: UIViewController
var url:NSString!
var webView:UIWebView!
override func viewDidLoad()
super.viewDidLoad()
var url:NSURL = NSURL(string:self.url.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding))
var request:NSURLRequest = NSURLRequest(URL: url)
webView.loadRequest(request)
我希望有人可以帮助我解决这个问题,我一直在努力解决这个问题。 :/
谢谢!
【问题讨论】:
setURL
的方法签名是什么 - 你能发布那个视图控制器的标题吗?
看起来您的 setURL 方法需要的是 NSURL,而不是字符串
标题是什么意思? Swift 没有任何标题:s
你的destinationViewController 在Objective-C 中吗?如果是这样,它将有一个桥接头。或者,如果它在 Swift 中,请发布。
我已经用控制器更新了帖子,以便由 segue.destinationViewController 调用
【参考方案1】:
在 Objective C 或 Swift 中访问destinationViewController 时使用的正确模式是将其转换为正确的子类类型。这将允许您访问子类的方法和属性。
所以你应该说
let myDestVC = segue.destinationViewController as MyViewControllerClass
或者在目标 C 中
MyViewControllerClass *myDestVC =(MyViewControllerClass *)segue.destinationViewController;
【讨论】:
【参考方案2】:你为什么打电话给segue.destinationViewController.setURL(string, forKey: nil)
? forKey:
部分来自哪里?我认为您只是调用了错误的方法,错误消息并没有太大帮助。
【讨论】:
以上是关于UIStoryBoardSegue 方法的 iOS Swift 问题的主要内容,如果未能解决你的问题,请参考以下文章
自定义 UIStoryboardSegue 和 UIViewController 转换之间的区别
UIStoryboardSegue - performSegue 方法传递类而不是标识符