Erreur: la référence Ambiguë à un membre "indice" dans Swift 3
J'ai téléchargé le Xcode beta 8 et converti mon syntaxe de Swift 3. Quand je l'ai fait, j'ai eu l'éponyme d'erreur avec ce code (ce n'était pas le cas avant):
Swift 3:
do {
let fileAttributes = try FileManager.default().attributesOfItem(atPath: fileURL.path!) //Error here
let fileSizeNumber = fileAttributes[NSFileSize] as! NSNumber
fileSize = fileSizeNumber.longLongValue
} catch _ as NSError {
print("Filesize reading failed")
}
Swift 2:
do {
let fileAttributes = try NSFileManager.defaultManager().attributesOfItemAtPath(fileURL.path!)
let fileSizeNumber = fileAttributes[NSFileSize] as! NSNumber
fileSize = fileSizeNumber.longLongValue
} catch _ as NSError {
print("Filesize reading failed")
}
Est-ce un bug Swift 3, ou ai-je raté quelque chose?
Je sais qu'il ya beaucoup de questions à propos de la même erreur, mais ceux-ci ne sont pas à résoudre mon problème. Je suis heureux de le modifier pour obtenir des éclaircissements.
Merci d'avance!
Je n'ai pas cette erreur dans l'aire de jeu. Pouvez-vous donner plus de code? Et la première Swift 2.2 code.
Non, cette erreur vient avant que je puisse build/run.
Non, cette erreur vient avant que je puisse build/run.
OriginalL'auteur atirit | 2016-06-17
Vous devez vous connecter pour publier un commentaire.
Je pense que quelque chose comme cela devrait fonctionner:
Depuis
NSFileSize
était juste une chaîne constante, je l'ai remplacé par sa valeur brute. Il semble ok - mais il serait préférable de trouver l'officiel équivalent, bien sûr (que je n'ai pas réussi à pour l'instant, donc ne prenez pas cette solution pour acquis, c'est juste une solution de contournement).Mise à jour de Xcode 8 GM:
À l'aide de
FileAttributeKey.size
est mieux que d'utiliser de la codé en dur constante (merci @rudy pour le rappel). Voici une mise à jour exemple:Je pense que vous trouverez que NSFileSize.rawValue, vous obtiendrez un meilleur résultat, puisque le nom de la constante n'est pas garanti d'être la même que la chaîne réelle qu'il représente.
Vous avez raison sur les valeurs codées en dur. J'ai udpated ma réponse.
OriginalL'auteur ayaio
Cela fonctionne dans Swift 3:
Par la coulée des attributs dans un NSDictionary, de nombreuses méthodes deviennent disponibles, y compris .fileSize():
.fileGroupOwnerAccountName()
.fileModificationDate()
.fileOwnerAccountName()
.filePosixPermissions()
.fileSize()
.fileSystemFileNumber()
.fileSystemNumber()
.fileType()
Il est facile de découvrir leur retour types de données en les examinant avec l'option-Cliquez sur Swift.
OriginalL'auteur stef
Cela fonctionne sur le Dictionnaire comme renvoyé par l'appel:
(Swift 3, XCode8 WWDC)
OriginalL'auteur Bjoern Kriews