2016-04-28 38 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")