2017-02-23 1 views
-4

Я преобразовывал временную метку во времени, но мое времяStampToDate дает этот вывод «Необязательно (1476775542548)», из-за которого он сбой. Так как я могу удалить эту необязательную строку.Ошибка из-за дополнительной строки в swift 3.0

let timeStampToDate = (String(describing:merchant.post["timestamp"])) as String 
    let timeSt = Date(jsonDate:"/Date(\(timeStampToDate))/") 
    merchantOpenLbl.text = Date().onlyTimee(date: timeSt!) 

    init?(jsonDate: String) { 
    //  "/Date(1487058855745)/" 

    let prefix = "/Date(" 
    let suffix = ")/" 
    let scanner = Scanner(string: jsonDate) 

    // Check prefix: 
    guard scanner.scanString(prefix, into: nil) else { return nil } 

    // Read milliseconds part: 
    var milliseconds : Int64 = 0 
    guard scanner.scanInt64(&milliseconds) else { return nil } 
    // Milliseconds to seconds: 
    var timeStamp = TimeInterval(milliseconds)/1000.0 

    // Read optional timezone part: 
    var timeZoneOffset : Int = 0 
    if scanner.scanInt(&timeZoneOffset) { 
     let hours = timeZoneOffset/100 
     let minutes = timeZoneOffset % 100 
     // Adjust timestamp according to timezone: 
     timeStamp += TimeInterval(3600 * hours + 60 * minutes) 
    } 

    // Check suffix: 
    guard scanner.scanString(suffix, into: nil) else { return nil } 

    // Success! Create NSDate and return. 
    self.init(timeIntervalSince1970: timeStamp) 
} 
+1

use optional Binding.This был дан ответ несколько раз. –

+0

Он не работает с использованием дополнительной привязки, которую я уже пробовал. –

ответ

2

Обернуто дополнительное значение, которое вы получаете от merchant.post["timestamp"].

if let timeStampToDate = merchant.post["timestamp"] as? String { 
    print(timeStampToDate) 
    let timeSt = Date(jsonDate:"/Date(\(timeStampToDate)))/") 
    merchantOpenLbl.text = Date().onlyTimee(date: timeSt!) 
} 

Примечание: Если он все еще не работает, то вы должны показать нам декларацию Date(jsonDate:)

Edit: Если это не строка, то попробовать, как этот путь

if let timeStampToDate = merchant.post["timestamp"] { 
    print(timeStampToDate) 
    let timeSt = Date(jsonDate:"/Date(\(timeStampToDate)))/") 
    merchantOpenLbl.text = Date().onlyTimee(date: timeSt!) 
} 
+0

Я думаю, проблема связана с 'let timeSt = Date (jsonDate:"/Date (\ (timeStampToDate))/")' (потому что OP сказал, что 'timeStampToDate' установлен правильно) –

+0

@AndreasOetjen Проверьте вопрос OP, говорящий «но мой timeStampToDate дает этот вывод« Необязательно (1476775542548) »« Значит, timeStampToDate является необязательным –

+0

@NiravD он никогда не переходит в состояние if. –

0
let timeStampToDate = (String(describing:merchant.post["timestamp"])) as String 
let timeSt = Date(jsonDate:"/Date(\(timeStampToDate!))/") 
merchantOpenLbl.text = Date().onlyTimee(date: timeSt!) 

Редактировать

if let timeStampToDate = (String(describing:merchant.post["timestamp"])) as? String { 
    let timeSt = Date(jsonDate:"/Date(\(timeStampToDate))/") 
    merchantOpenLbl.text = Date().onlyTimee(date: timeSt!) 
} 
+0

Его давая ошибку. Не могу заставить разворачивать значение необязательного типа «String». –

+0

Показана ли ошибка в строке 2 или 3? –

+0

Да, это показывает ошибку в строке 2. –

2

Вы можете использовать охрану, чтобы обернуть необязательное значение. Замените код кодом ниже.

guard let timeStampToDate = merchant.post["timestamp"] as? String else { 
    return 
} 

let timeSt = Date(jsonDate:"/Date(\(timeStampToDate))/") 
merchantOpenLbl.text = Date().onlyTimee(date: timeSt!) 
+0

Ошибка при передаче. Функция non-void должна возвращать значение в противном случае. –

+0

@RahulGupta Пожалуйста, покажите свой полный метод. –

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