我正在尝试将Objective方法转换为Swift.
目标-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)
}
}我希望有人能帮我解决这个问题,我已经有段时间在挣扎了。:/
谢谢!
发布于 2014-06-08 00:52:27
在目标C或Swift中访问destinationViewController时使用的正确模式是将其转换为正确的子类类型。这将允许您访问子类、方法和属性。
所以你应该说
let myDestVC = segue.destinationViewController as MyViewControllerClass 或在目标C中
MyViewControllerClass *myDestVC =(MyViewControllerClass *)segue.destinationViewController;发布于 2014-06-08 00:43:47
你为什么打电话给segue.destinationViewController.setURL(string, forKey: nil)?forKey:部分从何而来?我认为您只是调用了错误的方法,而错误消息并不是很有帮助。
https://stackoverflow.com/questions/24101883
复制相似问题