【问题标题】:Cannot invoke initializer for type 'NSURL' with an argument list of type '(fileURLWithPath: NSURL)'无法使用类型为“(fileURLWithPath:NSURL)”的参数列表调用类型“NSURL”的初始化程序
【发布时间】:2015-09-19 07:23:36
【问题描述】:

我为 Swift 2 升级了代码,这里出现错误:

无法使用 (fileURLWithPath: NSURL) 类型的参数列表调用类型 NSURL 的初始化程序

代码如下:

    let dirPaths = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)
    let docsDir = dirPaths[0] 
    let soundFilePath = NSURL(fileURLWithPath: docsDir).URLByAppendingPathComponent("sound.caf")
    let soundFileURL = NSURL(fileURLWithPath: soundFilePath)
    //The error goes here. 

【问题讨论】:

    标签: ios swift swift2


    【解决方案1】:

    fileURLWithPath的语法:

    public init(fileURLWithPath path: String)
    

    这意味着它只接受 String 作为参数。而且您将 NSURL 作为参数传递。

    你可以这样解决:

    let dirPaths = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)
    let docsDir = dirPaths[0]
    let soundFilePath = (docsDir as NSString).stringByAppendingPathComponent("sound.caf")
    let soundFileURL = NSURL(fileURLWithPath: soundFilePath)
    

    如果你想使用这里是扩展:

    extension String {
    
        func stringByAppendingPathComponent(path: String) -> String {
    
            return (self as NSString).stringByAppendingPathComponent(path)
        }
    }
    

    你可以这样使用它:

    let soundFilePath = docsDir.stringByAppendingPathComponent("sound.caf")
    let soundFileURL = NSURL(fileURLWithPath: soundFilePath)
    

    【讨论】:

    • 在 Swift 2 中 stringByAppendingPathComponent 被删除,这就是我升级代码的原因。但这无论如何都非常有用。
    • 很高兴为您提供帮助..:)
    【解决方案2】:

    你试图从一个 NSURL 对象创建一个 NSURL,没有初始化器。要正确创建 URL,只需替换

    let soundFilePath = NSURL(fileURLWithPath: docsDir).URLByAppendingPathComponent("sound.caf")
    let soundFileURL = NSURL(fileURLWithPath: soundFilePath)
    

    let soundFileURL = NSURL(fileURLWithPath: docsDir).URLByAppendingPathComponent("sound.caf")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多