'NSURLRequest?'没有名为 'URL' 的成员 - Swift



嗨,我对Swift编码真的很陌生,我正在努力遵循这本书中的代码:http://www.apress.com/9781484202098.了解iOS 8应用程序开发第二版由James Bucanek

特别是,我正在完成第3章——构建一个URL缩短应用程序,但尽管我准确地复制了代码,但我在第76页的代码上出现了错误:

if let toShorten = webView.request.URL.absoluteString {

哪个州表示"NSURLRequest?"没有名为"URL"的成员。

我试过在谷歌上搜索答案,但不幸的是什么都没找到。我能找到的任何响应似乎都表明我的代码应该可以工作(例如,如何获得我在UIWebView上点击的url?)。这似乎是最接近SWIFT的答案:为什么我可以';无法在UIWebView中加载当前URL?但这个解决方案似乎对我不起作用。如果我加一个?在请求之后,它至少会构建它,但我会返回一个nil变量。

我使用的是Xcode v6.1.1。以下是ViewController.swift:中出现错误的代码

    let GoDaddyAccountKey = "0123456789abcdef0123456789abcdef" //this is replaced by my actual account key in my own code
    var shortenURLConnection: NSURLConnection?
    var shortURLData: NSMutableData?
    @IBAction func shortenURL( AnyObject ) {
        if let toShorten = webView.request?.URL.absoluteString { // ? now added
        let encodedURL = toShorten.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding)
        let urlString = "http://api.x.co/Squeeze.svc/text/(GoDaddyAccountKey)?url=(encodedURL)"
        shortURLData = NSMutableData()
        if let firstrequest = NSURL(string: urlString) //added if here and removed !
        let request = NSURLRequest(URL:firstrequest)
        shortenURLConnection = NSURLConnection(request:request, delegate:self)
        shortenButton.enabled = false
        }
        }
    }

如果你对我如何解决这个问题有任何建议,我将不胜感激!

更新:

根据下面Ashley的建议,我修改了我的代码,使其不再出现错误(请参阅上面的评论)。然而,它现在已不再运行。这似乎是因为urlString被创建为http://api.x.co/Squeeze.svc/text/d558979bb9b84eddb76d8c8dd9740ce3?url=Optional("http://www.apple.com/")。因此,问题在于所包括的Optional(),从而使其成为无效的URL。有人对如何删除这个有什么建议吗?

requestUIWebView:上的可选属性

var request: NSURLRequest? { get }

stringByAddingPercentEscapesUsingEncoding还返回一个可选的:

func stringByAddingPercentEscapesUsingEncoding(_ encoding: UInt) -> String?

您需要的是让的用户在几个地方进行可选绑定

if let toShorten = webView.request?.URL.absoluteString {
    if let encodedURL = toShorten.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding) {
        let urlString = "http://api.x.co/Squeeze.svc/text/(GoDaddyAccountKey)?url=(encodedURL)"
        shortURLData = NSMutableData()
        if let firstrequest = NSURL(string: urlString) {  // If a method can return a nil, don't force unwrap it
            let request = NSURLRequest(URL:first request)
            shortenURLConnection = NSURLConnection(request:request, delegate:self)
            shortenButton.enabled = false
        }
    }
}

有关的详细信息,请参阅苹果的可选链接文档

请参阅苹果公司关于NSURL类的文档

最新更新