【问题标题】:Swift: "Ambiguous reference to member" init斯威夫特:“对成员的模棱两可的引用”初始化
【发布时间】:2017-03-29 10:01:16
【问题描述】:

有几篇关于这个主题的帖子,但我在其中看不到这个问题的答案。以下行产生标题错误:

let pdf_url = NSURL.fileURL(withPath: inputfile)
let pdf_doc = PDFDocument.init?(url: pdf_url) as! URL

我知道 init 方法可以采用多种数据类型,但我肯定已经明确表示我需要一个 URL。

错误信息是:

error: ambiguous reference to member 'init(url:)'

可能相关的一个问题是,Xcode 偶尔会在第一行告诉我使用 URL,而不是 NSURL,然后抱怨 URL 没有 fileURL 方法。 (我也尝试过 CGPDFDocument,但它想要一个 CFURL,并且不接受 NSURL,即使它们应该是“免费桥接”。)

【问题讨论】:

    标签: swift xcode


    【解决方案1】:

    发生错误是因为您(尝试)将 PDFDocument 转换为 URL。

    你可能是说

    PDFDocument.init?(url: pdf_url as! URL) 
    

    但推荐的 Swift 3 语法是

    let pdfURL = URL(fileURLWithPath: inputfile) // returns a non-optional URL
    let pdfDoc = PDFDocument(url: pdfURL)
    

    请使用 - Swift - 驼峰式变量名,而不是 - javascript / php - 蛇形大小写。

    【讨论】:

    • Apple 的文档中说要使用 init,而其他语言的类似脚本中需要使用 init。我怎么知道事实并非如此?
    • PDFDocument(urlPDFDocument.init?(url 是同义词。
    • 同义词表示相同。是的,他们会,但 Apple 建议使用更简单的形式。
    • 我认为 Xcode 的 Fix-it 告诉我把它放进去,可能是其他一些错误的结果。同样,它在文档中。但是好的,所以没有问号,它们是同义词。 Apple 在哪里说要使用更简单的形式?
    • 文档显示了方法声明。使用它的方式可以不同。我不知道任何明确使用 .init 的 Apple 示例代码,这意味着使用更简单的形式。
    【解决方案2】:

    使用URL:

    let pdf_url = URL(fileURLWithPath: inputfile)
    

    【讨论】:

    • @benwiggy 因为您没有正确创建pdf,因此PDFDocument(url:pdf_url)
    • 啊,是的。与另一条评论一样。请注意我在那里的回复。 Apple 的文档说要使用 init 方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-23
    • 2019-09-11
    • 1970-01-01
    • 1970-01-01
    • 2017-07-22
    相关资源
    最近更新 更多