2016-10-21 7 views
1

У меня есть некоторый код, который получает метку текущей очереди НОД для целей лесозаготовок, который выглядит, как это в Swift 2:Получить ярлык НОД в Swift 3

if let queueName 
    = String(UTF8String: dispatch_queue_get_label(DISPATCH_CURRENT_QUEUE_LABEL)) where !queueName.isEmpty { 
    detailedMessage += "[" + queueName + "] " 
} 

После Xcode 8 превращают это Swift 3 , это выглядит следующим образом:

if let queueName 
    = String(validatingUTF8: DISPATCH_CURRENT_QUEUE_LABEL.label), !queueName.IsEmpty { 
    detailedMessage += "[" + queueName + "] " 
} 

Однако Xcode дает мне следующую ошибку, когда я строю:

значение типа кортежа «()» не имеет члена «ярлык»

Я не нашел способа получить текущую метку очереди в Swift 3. Может кто-нибудь помочь?

Спасибо,
Дэвид

ОБНОВЛЕНО Вот функция для связи:

public func log(_ message: String, 
       tag: String, 
       level: Logger.LogLevel, 
       userInfo: [String : String]?, 
       functionName: StaticString, 
       fileName: StaticString, 
       lineNumber: Int) { 

    var detailedMessage = "" 

    let formattedDate = self._dateFormatter.string(from: Date()) 
    detailedMessage += "\(formattedDate) " 

    detailedMessage += "[\(level.description)] " 

    if Thread.isMainThread { 
     detailedMessage += "[main] " 
    } else { 
     if let threadName = Thread.current.name , !threadName.isEmpty { 
      detailedMessage += "[" + threadName + "] " 
     } else if let queueName 
      = String(validatingUTF8: DISPATCH_CURRENT_QUEUE_LABEL.label) , !queueName.isEmpty { 
      detailedMessage += "[" + queueName + "] " 
     } else { 
      detailedMessage += "[" + String(format:"%p", Thread.current) + "] " 
     } 
    } 

    let lastPathComponent = NSString(stringLiteral: fileName).lastPathComponent 
    detailedMessage += "[" + lastPathComponent + ":" + String(lineNumber) + "] " 

    detailedMessage += "\(functionName) " 

    let fullMessage = self.messageWithTag(tag, message: message) 
    detailedMessage += "> \(fullMessage)" 

    NSLog("\(fullMessage)") 
} 
+0

Giv ru, что 'DISPATCH_CURRENT_QUEUE_LABEL' является' NULL', похоже, вы можете сделать 'String (validatingUTF8: __dispatch_queue_get_label (nil))'. Но это дает мне завещания. – Rob

+0

@Rob Спасибо. Это работает, но я согласен с вами. Если это окажется частным API, то мы, вероятно, будем недовольны, когда попытаемся отправить наше приложение. –

+0

Поскольку 'dispatch_queue_get_label' и' DISPATCH_CURRENT_QUEUE_LABEL' оба документированы, это, вероятно, просто надзор за Apple. Вы должны указать ошибку на странице https://bugreport.apple.com. –

ответ

0

Вы можете использовать этот метод

let cName = __dispatch_queue_get_label(nil) 
let name = String(cString: cName, encoding: .utf8)