68 votes

Comment imprimer le nom de la méthode et le numéro de ligne dans swift

Voici un exemple de ce que je veux faire:

 func application(application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: NSError)
{
    let  nm =  NetworkModel()
    nm.sendlog("file name :AppDelegate , line number : 288", info: " Failed to register: \(error)")
}
 

Le scénario actuel est basé sur la valeur codée en dur line number et file name . mais est-il possible de choisir par programme line number et file name .

168voto

Harshal Yanpallewar Points 982
Literal        Type     Value

#file          String   The name of the file in which it appears.
#line          Int      The line number on which it appears.
#column        Int      The column number in which it begins.
#function      String   The name of the declaration in which it appears.
#dsohandle     String   The dso handle.

Exemple

print("Function: \(#function), line: \(#line)") 

Avec les valeurs par défaut dans les paramètres, vous pouvez également créer une fonction

public func track(_ message: String, file: String = #file, function: String = #function, line: Int = #line ) { 
    print("\(message) called from \(function) \(file):\(line)") 
}

qui peut être utilisée comme ceci

track("enters app")

Dans Swift 2.1

 Literal        Type     Value

__FILE__       String   The name of the file in which it appears.
__LINE__       Int      The line number on which it appears.
__COLUMN__     Int      The column number in which it begins.
__FUNCTION__   String   The name of the declaration in which it appears.

pour plus d'informations, voir la Documentation Vérifier La Documentaion

13voto

Inder Kumar Rathore Points 13538

Vous pouvez utiliser #function , #file , #line

Voici l'implémentation de la méthode log dans swift: https://github.com/InderKumarRathore/SwiftLog

Ci-dessous l'extrait

 public func debugLog(object: Any, functionName: String = #function, fileName: String = #file, lineNumber: Int = #line) {
  #if DEBUG
    let className = (fileName as NSString).lastPathComponent
    print("<\(className)> \(functionName) [#\(lineNumber)]| \(object)\n")
  #endif
}
 

7voto

gandhi Mena Points 963

Pour Swift 3 et Swift 4 :

 func printLog(_ message: String, file: String = #file, function: String = #function, line: Int = #line) {
    #if DEVELOPMENT
        let className = file.components(separatedBy: "/").last
        print(" ❌ Error ----> File: \(className ?? ""), Function: \(function), Line: \(line), Message: \(message)")
    #endif
}

// "❌ Error ----> File: classNameViewController.swift, function: functionName(), Line: 123, Message: messageError"
 

3voto

Amit Jagesha シ Points 832
static func DLog(message: String, file: String = #file, function: String = #function, line: Int = #line, column: Int = #column) {
    print("\(file) : \(function) : \(line) : \(column) - \(message)")
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X