【问题标题】:URL, NSURL - compiler errors in code from the standard samplesURL、NSURL - 标准示例代码中的编译器错误
【发布时间】:2017-01-30 18:55:46
【问题描述】:

m.b.我在问愚蠢的问题,但我真的是 Swift 和 iPhone 编程的新手。使用XCode 8.0。 我想创建WebView 应用程序并从这里获取下一个代码:http://sourcefreeze.com/uiwebview-example-using-swift-in-ios/

我的代码:

import UIKit
import Foundation

class ViewController: UIViewController {


    @IBOutlet weak var myWebView: UIWebView!
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        let url = NSURL (string: "http://www.sourcefreeze.com");
        let requestObj = NSURLRequest(URL: url!);
        myWebView.loadRequest(requestObj);
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}

当然,我已经创建了UIWebView 的 UI 对象并将其连接到控制器:

@IBOutlet weak var myWebView: UIWebView!

在构建期间,我收到下一个红色警报:

'NSURL' 不能隐式转换为 'URL';您的意思是使用 'as' 来显式转换吗?

据我了解,此代码在 2 年前运行良好。我想我错过了什么,但是什么? 感谢您的提前。

【问题讨论】:

  • “这段代码在 2 年前就完美运行了” – Swift 在过去两年里改变了很多。特别是 Xcode 8 附带的 Swift 3。您可以查看发行说明和迁移指南 swift.org/migration-guide
  • NSURL 类型在 swift 3.0 中改为 URL

标签: ios swift uiwebview swift2 nsurl


【解决方案1】:

这是解决问题的最简单方法:

let url = URL(string: "http://www.sourcefreeze.com")!
myWebView.load(URLRequest(url: url))

Xcode 经常告诉你哪里出了问题。所以从 Xcode 消息中可以理解 NSURL 应该被转换为 URL。尝试阅读相关资源和机器人使用旧教程。 Swift 是动态变化的语言,总是尽量使用最新的资源。

【讨论】:

  • 第二个字符串给我错误:在调用中缺少参数“mimeType”的参数
【解决方案2】:

这样试试

myWebView.loadRequest(NSURLRequest(URL: NSURL(string: "http://www.sourcefreeze.com")))
myWebView.delegate = self;
self.view.addSubview(myWebView)

【讨论】:

  • 我收到错误:无法将“NSURL”类型的值转换为预期的参数类型“URL”
  • 使用 Swift 原生类型 String 并使用 guard 来确保数据不是 nil
【解决方案3】:

尝试使用URL 而不是NSURL,因为它被替换为URL Swift 3 中的类型

let url = URL(string: "http://www.sourcefreeze.com")

这是来自苹果开发者论坛的说明

Foundation 框架的 Swift 覆盖提供了 URL 结构,它连接到 NSURL 类。 URL 值类型提供 与 NSURL 引用类型功能相同,两者可以 在与 Objective-C 交互的 Swift 代码中可互换使用 蜜蜂。这种行为类似于 Swift 如何桥接标准字符串, 数字和集合类型到它们对应的基础 类。

有关值类型的更多信息,请参阅类和结构 Swift 编程语言 (Swift 3) 和使用 Cocoa 将 Swift 与 Cocoa 和 Objective-C 结合使用的框架 (Swift 3)。

【讨论】:

    【解决方案4】:

    此代码有效:

        let myUrl = URL (string: "http://www.sourcefreeze.com")!
        let request = URLRequest(url: myUrl);
        myWebView.loadRequest(request);
    

    现在WebView是不可见的,但我会先尝试在论坛中搜索解决方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-05
      • 2017-06-25
      • 1970-01-01
      相关资源
      最近更新 更多