stringByAppendingPathComponent недоступен
мое приложение делится фото на Instagram, чтобы сделать это, он сначала сохраняет его во временном каталоге:
let writePath = NSTemporaryDirectory().stringByAppendingPathComponent("instagram.igo")
Он работал на Swift 1.2, но не работает Swift 2.0.
данное сообщение об ошибке:
stringByAppendingPathComponent недоступен: вместо этого используйте URLByAppendingPathComponent на NSURL.
9 ответов:
похоже на способ
stringByAppendingPathComponentудаляется в Swift 2.0, так что сообщение об ошибке предлагает использовать:let writePath = NSURL(fileURLWithPath: NSTemporaryDirectory()).URLByAppendingPathComponent("instagram.igo")обновление:
URLByAppendingPathComponent()был заменен наappendingPathComponent()так что вместо этого:let writePath = NSURL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent("instagram.igo")
он работает
NSStringтак что вы можете использовать его как это:extension String { func stringByAppendingPathComponent(path: String) -> String { let nsSt = self as NSString return nsSt.stringByAppendingPathComponent(path) } }теперь вы можете использовать это расширение, которое преобразует ваш
StringдоNSStringсначала выполните операцию.и ваш код будет:
let writePath = NSTemporaryDirectory().stringByAppendingPathComponent("instagram.igo")вот некоторые другие методы использовать:
extension String { var lastPathComponent: String { return (self as NSString).lastPathComponent } var pathExtension: String { return (self as NSString).pathExtension } var stringByDeletingLastPathComponent: String { return (self as NSString).stringByDeletingLastPathComponent } var stringByDeletingPathExtension: String { return (self as NSString).stringByDeletingPathExtension } var pathComponents: [String] { 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) } }справка здесь.
для swift 3.0:
extension String { func stringByAppendingPathComponent1(path: String) -> String { let nsSt = self as NSString return nsSt.appendingPathComponent(path) } } let writePath = NSTemporaryDirectory().stringByAppendingPathComponent(path: "instagram.igo") extension String { var lastPathComponent: String { return (self as NSString).lastPathComponent } var pathExtension: String { return (self as NSString).pathExtension } var stringByDeletingLastPathComponent: String { return (self as NSString).deletingLastPathComponent } var stringByDeletingPathExtension: String { return (self as NSString).deletingPathExtension } var pathComponents: [String] { return (self as NSString).pathComponents } func stringByAppendingPathComponent(path: String) -> String { let nsSt = self as NSString return nsSt.appendingPathComponent(path) } func stringByAppendingPathExtension(ext: String) -> String? { let nsSt = self as NSString return nsSt.appendingPathExtension(ext) } }
просто обернуть строку
NSString.let writePath = (NSTemporaryDirectory() as NSString).stringByAppendingPathComponent("instagram.igo")
на Swift 3:
let writePath = URL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent(directoryname).pathили лучше создать это расширение:
extension String { func appendingPathComponent(_ string: String) -> String { return URL(fileURLWithPath: self).appendingPathComponent(string).path } }использование:
let writePath = NSTemporaryDirectory().appendingPathComponent(directoryname)
Swift 3 Решение:
вот функция, чтобы получить путь к каталогу документов -
func getDocumentsDirectory() -> URL { let paths = FileManager.default.urls(for: .documentDirectory, in:.userDomainMask) let documentsDirectory = paths[0] return documentsDirectory }как использовать:
getDocumentsDirectory.appendingPathComponent("google.com")результат:
file:///var/folders/w1/3rcp2fvs1qv43hfsh5876s0h0000gn/T/com.apple.dt.Xcode.pg/containers/com.apple.dt.playground.stub.iOS_Simulator.MyPlayground-7CF9F706-509C-4D4C-997E-AB8FE9E4A6EA/Documents/google.com
для swift 2.0
// Get the documents Directory func documentsDirectory() -> String { let documentsFolderPath = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)[0] return documentsFolderPath } // Get path for a file in the directory func fileInDocumentsDirectory(filename: String) -> String { let writePath = (documentsDirectory() as NSString).stringByAppendingPathComponent("Mobile") if (!NSFileManager.defaultManager().fileExistsAtPath(writePath)) { do { try NSFileManager.defaultManager().createDirectoryAtPath(writePath, withIntermediateDirectories: false, attributes: nil) } catch let error as NSError { print(error.localizedDescription); } } return (writePath as NSString).stringByAppendingPathComponent(filename) } //# MARK: - Save Image in Doc dir func saveImage (image: UIImage, path: String ) -> Bool{ let pngImageData = UIImagePNGRepresentation(image) // let jpgImageData = UIImageJPEGRepresentation(image, 1.0) // if you want to save as JPEG let result = pngImageData!.writeToFile(path, atomically: true) print("\(result)") print("\(path)") return result }
вместо этого можно использовать URLByAppendingPathComponent (). Обратите внимание, что вы должны обрезать строку пути, чтобы удалить префикс" file://":
let uniqueFileName = NSUUID().UUIDString let documentsDirectory = getDocumentsDirectoryURL() if let path = documentsDirectory?.URLByAppendingPathComponent(uniqueFileName) { var pathString = path.absoluteString pathString = imagePathString.stringByTrimmingCharactersInSet(NSCharacterSet(charactersInString: "file://")) } func getDocumentsDirectoryURL() -> NSURL? { let fileManager = NSFileManager() if let docsDirectory = fileManager.URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask).first { return docsDirectory } return nil }
сделать следующее:
(("\(fileName)" as NSString).lastPathComponent as NSString).stringByDeletingPathExtension
Swift 4
extension String { var lastPathComponent: String { return (self as NSString).lastPathComponent } var pathExtension: String { return (self as NSString).pathExtension } var stringByDeletingLastPathComponent: String { return (self as NSString).deletingLastPathComponent } var stringByDeletingPathExtension: String { return (self as NSString).deletingPathExtension } var pathComponents: [String] { return (self as NSString).pathComponents } func stringByAppendingPathComponent(path: String) -> String { let nsSt = self as NSString return nsSt.appendingPathComponent(path) } func stringByAppendingPathExtension(ext: String) -> String? { let nsSt = self as NSString return nsSt.appendingPathExtension(ext) } }
Comments