【问题标题】:Apple Swift 3.0 Data苹果 Swift 3.0 数据
【发布时间】:2017-05-29 07:12:59
【问题描述】:

我正在尝试使用:

init(contentsOf: URL, options: Data.ReadingOptions)

在带有 xCode 8.0 的 Swift 3.0 中。我使用的确切语句是:

let jsonData = try Data.init(contentsOf: URL(file_path), options: .mappedIfSafe)

我也试过了:

let jsonData = try Data(contentsOf: URL(file_path), options: .mappedIfSafe)

我在关注documentation

这不会编译,抱怨调用中的参数标签不正确。

我是 Swift 新手,所以请保持温柔。 file_path 是从NSOpenPanel 获得并使用stringValue 进行字符串化的字符串。

谢谢!

【问题讨论】:

  • 请注意,使用 camelCase 而不是 snake_case 是 Swift 约定。

标签: swift file swift3 nsdata


【解决方案1】:

不要将字符串路径与NSOpenPanel 结合使用,获取url 属性——这避免了创建URL 的额外步骤——并将Data 初始化程序包装在do - catch 块中。

if let url = openPanel.url {
    do {
        let jsonData = try Data(contentsOf: url, options: .mappedIfSafe)
        // do things with jsonData
    } catch {
       print(error)
    }
}

【讨论】:

  • 避免使用字符串路径可能是个好建议,但需要一些理由。它似乎也与 OP 询问的问题没有太大关系。
  • 我添加了一些理由
  • 它抱怨的是:调用中的参数标签不正确(有 'contentsOf:options:_:' 预期 'bytesNoCopy:count:deallocator:')
  • 尝试省略options参数:Data(contentsOf: url)
  • 不,那样做 Cannot convert value of type() -> () to expected argument type 'Data.ReadingOptions') 并在末尾添加一个未标记的参数也不起作用。
【解决方案2】:

看起来您只是错过了参数标签。此外,您的 Data 构造函数中不需要 init 关键字。

let jsonData = try Data(contentsOf: URL(fileURLWithPath: filePath), options: .mappedIfSafe)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-29
    • 1970-01-01
    • 2010-11-08
    • 2018-06-12
    • 2020-03-01
    相关资源
    最近更新 更多