2

尝试设置 XCGLogger 并收到错误:

对成员“日志”的模糊引用

我看到这个问题已经提出,但我不清楚解决方案..

根据安装指南,将此全局常量添加到 AppDelegate.swift:

@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
    }

然后在单个源文件中:

import XCGLogger
log.debug("A debug message")

正确的用法是什么?

4

2 回答 2

4

问题比较简单。如果你log在里面声明AppDelegate,你正在创建一个实例变量。要访问它,您必须将其作为实例变量访问:

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

如果您想log在任何地方都可以访问,则必须将其设为全局常量:

在您的 AppDelegate 中,为默认 XCGLogger 实例声明一个全局常量。

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(...)

为了解释模棱两可的引用,有一个数学函数叫做log,文件中也有一个log函数malloc.h。由于您将 aString作为第一个参数传递并且两个函数都不匹配,因此编译器会警告您它不知道要使用这两个函数中的哪一个。

于 2016-04-28T20:17:39.730 回答
0

另外我想最好创建全局常量文件并创建这样的东西(如果你已经声明了登录AppDelegate):

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

然后简单使用LOG.error("error")

于 2016-07-29T08:22:33.557 回答