2016-04-28 35 views
2

試圖建立XCGLogger和接收錯誤:XCGLogger:不明確的參考成員「登陸」

Ambiguous reference to member 'log'

我看到這個問題已經raised但我不是在溶液變透明..

在單獨源文件

@UIApplicationMain 
class AppDelegate: UIResponder, UIApplicationDelegate { 
    var window: UIWindow? 
    let log = XCGLogger.defaultInstance() 

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 
     log.setup(.Debug, showThreadName: true, showLogLevel: true, showFileNames: true, showLineNumbers: true, writeToFile: nil, fileLogLevel: .Debug) 
     return true 
    } 

然後:

0每安裝指南加入這個全局變量到AppDelegate.swift
import XCGLogger 
log.debug("A debug message") 

什麼是正確的用法?

+0

凡在AppDelegate中沒有你把代碼?它是在AppDelegate類還是全局? – ryantxr

+0

'nameOfYourProject.log.debug'?但可能將'log'重命名爲其他內容會更好。你能找到碰撞標識符「log」嗎? – Sulthan

+0

@ryantxr:更新的問題 –

回答

4

問題很簡單。如果你在AppDelegate裏聲明log,你正在創建一個實例變量。要訪問它,你將需要訪問它作爲實例變量:

(UIApplication.sharedApplication().delegate as! AppDelegate).log.debug("test") 

如果你想log可訪問無處不在,你將不得不使其成爲一個全局常量:

In your AppDelegate, declare a global constant to the default XCGLogger instance.

let log = XCGLogger.defaultInstance() 

@UIApplicationMain 
class AppDelegate: UIResponder, UIApplicationDelegate { 
    var window: UIWindow? 

(沒有必要在AppDelegate文件中聲明它,你可以基本上把它放在你的代碼中的任何地方)

或使之成爲static

@UIApplicationMain 
class AppDelegate: UIResponder, UIApplicationDelegate { 

    var window: UIWindow? 
    static let log = XCGLogger() 

,並使用訪問:

AppDelegate.log.debug(...) 

爲了解釋ambigious參考,有一個名爲log一個數學函數,並且也有在malloc.h文件log功能。由於您傳遞String作爲第一個參數,且兩個函數都不匹配,編譯器會警告您它不知道要使用的兩個函數中的哪一個。

+0

感謝。這是一個NOOB問題.. –

+1

同樣的問題,現在它解決了!謝謝 ! – Shinichi

0

此外,我想這是最好創建全局常量文件並創建像這樣(如果你已經聲明日誌中AppDelegate):

let LOG = (UIApplication.sharedApplication().delegate as! AppDelegate).log 

,然後簡單的使用LOG.error("error")