swift xcode nsurl swift3

urlsession swift 3



¿Cuál es el equivalente de Swift 3 de NSURL.URLByAppendingPathComponent()? (3)

Estoy siguiendo un tutorial básico sobre la construcción de una aplicación de iOS simple en Swift.

Está escrito en Swift 2.x, y trabajo con XCode 8 Beta y Swift 3.

El tutorial sugiere usar NSFileManager para encontrar un directorio de datos. Los nombres de las clases han cambiado, por lo que el Swift 3 auto-corregido se ve así:

static let DocumentsDirectory = FileManager().urlsForDirectory(.documentDirectory, inDomains:.userDomainMask).first! static let ArchiveURL = DocumentsDirectory.URLByAppendingPathComponent("meals")

Sin embargo, Xcode ahora se queja de que

Value of type ''URL'' has no member ''URLByAddingPathComponent''

No puedo averiguar cómo se llama el método ahora.

La referencia de clase NSURL no contiene ninguna pista sobre cómo abordarlo desde Swift 3

  • ¿Cuál es el nuevo nombre del método?

  • ¿A dónde debo ir para encontrar una referencia de clase completa para Swift 3 (o la interfaz de Swift 3 para la biblioteca en la que está definida la clase de URL ? Todavía no entiendo completamente la nomenclatura) para que pueda investigarlo yo mismo en el ¿futuro?


A partir de Xcode 8 beta 4, se denomina appendingPathComponent(_:) y no arroja.

static let archiveURL = documentsDirectory.appendingPathComponent("meals")

También como señala Leo Dabus en los comentarios , su propiedad documentsDirectory necesitará cambiarse para usar las urls(for:in:) en la versión beta 4:

static let documentsDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]

(Tenga en cuenta que he hecho los nombres de sus propiedades lowerCamelCase , según las pautas de diseño de la API Swift . También recomendaría usar FileManager.default , en lugar de crear una nueva instancia).

Puede echar un vistazo a la última guía de referencia de API de Apple para ver los cambios de nombres de API que tuvieron lugar en Swift 3.


Ahora ha cambiado a appendingPathComponent(_:) y arroja, por lo que debe envolverlo en do - catch block

do { let archiveURL = try documentsDirectory?.appendingPathComponent("meals") } catch { print(error) }

Actualizar

De acuerdo con Xcode 8 beta 4, el appendingPathComponent(_:) no arroja error.

Para información relevante, ver respuesta por @Hamish


func appendingPathComponent(String)

=> Devuelve una nueva URL al agregar un componente de ruta a la URL original.

static let archiveURL = documentsDirectory?.appendingPathComponent("meals")

Si es un directorio:

func appendingPathComponent(String, isDirectory: Bool)

=> Devuelve una nueva URL al agregar un componente de ruta a la URL original, junto con una barra inclinada si el componente se designa como directorio.

static let archiveURL = documentsDirectory?.appendingPathComponent("meals", isDirectory: true)