2016-09-06 2 views
14

Я конвертирую проект, разработанный в Swift2.3 в Swift3.0 с использованием Xcode8 Beta4. В котором у меня есть метод преобразования даты в строку, но он не может ее преобразовать.Тип 'TimeZone' не имеет '' 'пользователя' 'Swift3

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

Кроме того, в документации нет ни одного члена с именем local.

Можно ли использовать TimeZone? или мы должны использовать NSTimeZone?

+0

попробовать этот formatter.timeZone = .local –

+0

'NSTimeZone.local' работает, то же самое для' '.system' и .default'. Вы можете подать отчет об ошибке в Apple. –

+0

@ Anbu.Karthik: '.local' также не работает. – technerd

ответ

23

Погрузившись в иерархию классов, вы нашли NSTimeZone как public typealias, которые открывают доступ для нас NSTimeZone.

Внутри TimeZone

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

    public typealias ReferenceType = NSTimeZone 
} 

Итак, используя ниже ошибки синтаксиса получить исчезают.

Таким образом, код ниже будет работать.

местный часовой пояс.

formatter.timeZone = TimeZone.ReferenceType.local 

Для по умолчанию часового пояса. Используйте default с тем же синтаксисом.

formatter.timeZone = TimeZone.ReferenceType.default 

Для Система часового пояса. Используйте system с тем же синтаксисом.

formatter.timeZone = TimeZone.ReferenceType.system 

Swift 3

Вы можете использовать .current вместо .local.

TimeZone.current 
+1

просто используйте 'NSTimeZone.local' tor Local,' NSTimeZone.default' по умолчанию и 'NSTimeZone.system' для системы –

+2

@LeoDabus: Да, мы можем использовать' NSTimeZone' напрямую, но когда Xcode автоматически преобразует Swift2.3 в Swift3.0 затем преобразует 'NSTimeZone' в 'TimeZone'. Поэтому рекомендуется использовать Swift Classes. Поэтому, если кто-то хочет использовать 'TimeZone', тогда это вызовет проблему. Благодаря! – technerd

22

Используйте это вместо .local в быстром 3:

TimeZone.current 
+2

Это должен быть правильный ответ :) – dustinrwh

Смежные вопросы