web-dev-qa-db-fra.com

Le type «TimeZone» n'a pas de membre «local» dans Swift3

Je convertis un projet développé dans Swift2.3 en Swift3.0 en utilisant Xcode8 Beta4. Dans lequel j'ai une méthode pour convertir la date en chaîne, mais il ne parvient pas à la convertir.

class func convertDateToString(_ date:Date, dateFormat:String) -> String?
{
    let formatter:DateFormatter = DateFormatter();
    formatter.dateFormat = dateFormat;
    formatter.timeZone = TimeZone.local
    let str = formatter.string(from: date);
    return str;
}

enter image description here

Également dans la documentation, il n'y a aucun membre nommé local.

Existe-t-il un moyen d'utiliser directement TimeZone? ou nous devons utiliser NSTimeZone?

17
technerd

En approfondissant la hiérarchie des classes, ont trouvé NSTimeZone comme public typealias, qui nous ouvre l'accès à NSTimeZone.

À l'intérieur TimeZone

public struct TimeZone : CustomStringConvertible, CustomDebugStringConvertible, Hashable, Equatable, ReferenceConvertible {

    public typealias ReferenceType = NSTimeZone
}

Donc, en utilisant l'erreur de syntaxe ci-dessous, disparaissez.

Donc, le code ci-dessous fonctionnera.

Pour local fuseau horaire.

formatter.timeZone = TimeZone.ReferenceType.local

Pour par défaut fuseau horaire. Utilisez default avec la même syntaxe.

formatter.timeZone =  TimeZone.ReferenceType.default

Pour système fuseau horaire. Utilisez system avec la même syntaxe.

formatter.timeZone = TimeZone.ReferenceType.system

Swift

Vous pouvez utiliser .current au lieu de .local.

TimeZone.current
26
technerd

Utilisez ceci au lieu de .local in Swift 3:

TimeZone.current
24
RawMean