2017-09-08 35 views
2

我想我的代码转换为斯威夫特3,我得到这个错误:参数标签“(网址:)”不匹配任何可用的重载

Argument labels '(URL:)' do not match any available overloads

let viewController = VisitableViewController(URL: URL) 

这里是我的全部代码:

var window: UIWindow? 
var navigationController = UINavigationController() 
var session = Session() 


func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 
    window?.rootViewController = navigationController 
    visit(URL: NSURL(string: "http://localhost:9292/")!) 
    return true 
} 

func visit(URL: NSURL) { 
    let viewController = VisitableViewController(URL: URL) 
    navigationController.pushViewController(viewController, animated: true) 
    session.visit(viewController) 
} 

这里是VisitableViewController:

import UIKit 

open class VisitableViewController: UIViewController, Visitable { 
    open weak var visitableDelegate: VisitableDelegate? 

    open var visitableURL: URL! 

    public convenience init(url: URL) { 
     self.init() 
     self.visitableURL = url 
    } 

    // MARK: Visitable View 

    open private(set) lazy var visitableView: VisitableView! = { 
     let view = VisitableView(frame: CGRect.zero) 
     view.translatesAutoresizingMaskIntoConstraints = false 
     return view 
    }() 

    fileprivate func installVisitableView() { 
     view.addSubview(visitableView) 
     view.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|[view]|", options: [], metrics: nil, views: [ "view": visitableView ])) 
     view.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|[view]|", options: [], metrics: nil, views: [ "view": visitableView ])) 
    } 

    // MARK: Visitable 

    open func visitableDidRender() { 
     self.title = visitableView.webView?.title 
    } 

    // MARK: View Lifecycle 

    open override func viewDidLoad() { 
     super.viewDidLoad() 
     view.backgroundColor = UIColor.white 
     installVisitableView() 
    } 

    open override func viewWillAppear(_ animated: Bool) { 
     super.viewWillAppear(animated) 
     visitableDelegate?.visitableViewWillAppear(self) 
    } 

    open override func viewDidAppear(_ animated: Bool) { 
     super.viewDidAppear(animated) 
     visitableDelegate?.visitableViewDidAppear(self) 
    } 

    /* 
    If the visitableView is a child of the main view, and anchored to its top and bottom, then it's 
    unlikely you will need to customize the layout. But more complicated view hierarchies and layout 
    may require explicit control over the contentInset. Below is an example of setting the contentInset 
    to the layout guides. 

    public override func viewDidLayoutSubviews() { 
     super.viewDidLayoutSubviews() 
     visitableView.contentInset = UIEdgeInsets(top: topLayoutGuide.length, left: 0, bottom: bottomLayoutGuide.length, right: 0) 
    } 
    */ 
} 
+3

您需要向我们展示'VisitableViewController'构造函数。 –

+0

请⌘-点击'VisitableViewController'并在头文件中查找正确的方法。 – vadian

+0

@vadian它来自UIKits框架,我已经更新了下面的代码。 – Hugo

回答

1

我建议:

func visit(url: URL) { 
    let viewController = VisitableViewController(url: url) 
    navigationController.pushViewController(viewController, animated: true) 
    session.visit(viewController) 
} 

这是使用url:代替URL:VisitableViewController初始值设定项。我也建议遵循visit的相同惯例,并且用URL替换NSURL

+0

谢谢你的工作!我还必须更新这一行访问(url:URL(string:“https:// localhost:9292 /”)!) – Hugo

0

试试这个代码 -

func visit(URL: NSURL) { 
    let viewController = VisitableViewController(url: URL) 
    navigationController.pushViewController(viewController, animated: true) 
    session.visit(viewController) 
} 

变化 -

visit(URL: NSURL(string: "http://localhost:9292/")!) 

visit(url: URL(string: "http://localhost:9292/")!) 
+0

谢谢!但现在我得到'无法将类型'URL.type'的值转换为期望的参数类型'URL' – Hugo

+0

是的,我标记为正确。它正在工作。谢谢! – Hugo

+0

我没有足够的代表upvote对不起... – Hugo

相关问题