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 方法传递类而不是标识符

使用自定义动画删除自定义 UIStoryboardSegue

如何“取消” UIStoryBoardSegue

UIStoryboardSegue:动画期间不显示视图

UIStoryboardSegue:顶视图没有向下滑动