Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/108.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios pathExtension不可用:请改为在NSURL上使用pathExtension。Swift 2.0_Ios_Xcode_Swift_Swift2 - Fatal编程技术网

Ios pathExtension不可用:请改为在NSURL上使用pathExtension。Swift 2.0

Ios pathExtension不可用:请改为在NSURL上使用pathExtension。Swift 2.0,ios,xcode,swift,swift2,Ios,Xcode,Swift,Swift2,我从文档目录中获取mp3文件,我写道pathExtension等于“mp3”,在Swift 1.2中它可以工作,但在Swift 2.0中我得到错误“'pathExtension'不可用:在NSURL上使用pathExtension。” 只需更改顺序:首先是过滤器,然后是映射。现在,将方法pathExtension应用于NSURL对象 listOfMP3Files = directoryURLs.filter { $0.pathExtension == "mp3" }.map { $0.lastP

我从文档目录中获取mp3文件,我写道pathExtension等于“mp3”,在Swift 1.2中它可以工作,但在Swift 2.0中我得到错误“'pathExtension'不可用:在NSURL上使用pathExtension。”


只需更改顺序:首先是
过滤器
,然后是
映射
。现在,将方法
pathExtension
应用于NSURL对象

listOfMP3Files = directoryURLs.filter { $0.pathExtension == "mp3" }.map { $0.lastPathComponent! }
您可以使用
尾随闭包
规则省略
过滤器
映射
之后的一对括号


Apple已从
String
中删除与路径相关的API,以选择更合适的
URL

,或者您可以使用此扩展:

extension String {
    var ns: NSString {
        return self as NSString
    }
    var pathExtension: String {
        return ns.pathExtension
    }
    var lastPathComponent: String {
        return ns.lastPathComponent
    }
}

Xcode 8.3.2•Swift 3.1

extension String {
    var fileURL: URL {
        return URL(fileURLWithPath: self)
    }
    var pathExtension: String {
        return fileURL.pathExtension
    }
    var lastPathComponent: String {
        return fileURL.lastPathComponent
    }
}

要使其向后兼容Swift 2.0中的1.2,请执行以下操作:

改进@Dharmesh Kheni的版本

extension String {
  var ns: NSString {
    return self as NSString
  }
  var pathExtension: String {
    return ns.pathExtension ?? ""
 }
  var lastPathComponent: String {
    return ns.lastPathComponent ?? ""
   }
}

我结合了达尔梅什和利奥的方法,让我的扩展工作:

  extension String { 
      public var url: NSURL {
         return NSURL(fileURLWithPath:self)
      }
      public var stringByDeletingLastPathComponent: String {
         return String(url.URLByDeletingLastPathComponent)
      }
 }
基于此,此扩展将在许多情况下帮助您

extension String {

    var lastPathComponent: String {
        get {
            return (self as NSString).lastPathComponent
        }
    }

    var pathExtension: String {
        get {

            return (self as NSString).pathExtension
        }
    }

    var stringByDeletingLastPathComponent: String {
        get {

            return (self as NSString).stringByDeletingLastPathComponent
        }
    }

    var stringByDeletingPathExtension: String {
        get {

            return (self as NSString).stringByDeletingPathExtension
        }
    }

    var pathComponents: [String] {
        get {

            return (self as NSString).pathComponents
        }
    }

    func stringByAppendingPathComponent(path: String) -> String {

        let nsSt = self as NSString

        return nsSt.stringByAppendingPathComponent(path)
    }

    func stringByAppendingPathExtension(ext: String) -> String? {

        let nsSt = self as NSString

        return nsSt.stringByAppendingPathExtension(ext)
    }
}

看起来确实很不错,但NSString铸造可能更便宜;-)我需要结合Dharmesh和Leo的方法来让我的扩展工作:
扩展字符串{public var url:NSURL{return NSURL(fileURLWithPath:self)}public var stringByDeletingLastPathComponent:String{return String(url.URLByDeletingLastPathComponent)}
extension String {

    var lastPathComponent: String {
        get {
            return (self as NSString).lastPathComponent
        }
    }

    var pathExtension: String {
        get {

            return (self as NSString).pathExtension
        }
    }

    var stringByDeletingLastPathComponent: String {
        get {

            return (self as NSString).stringByDeletingLastPathComponent
        }
    }

    var stringByDeletingPathExtension: String {
        get {

            return (self as NSString).stringByDeletingPathExtension
        }
    }

    var pathComponents: [String] {
        get {

            return (self as NSString).pathComponents
        }
    }

    func stringByAppendingPathComponent(path: String) -> String {

        let nsSt = self as NSString

        return nsSt.stringByAppendingPathComponent(path)
    }

    func stringByAppendingPathExtension(ext: String) -> String? {

        let nsSt = self as NSString

        return nsSt.stringByAppendingPathExtension(ext)
    }
}