【问题标题】:Integrating LogglyLogger-CocoaLumberjack in swift project在 swift 项目中集成 LogglyLogger-CocoaLumberjack
【发布时间】:2020-10-15 07:29:25
【问题描述】:

我正在尝试在我的 swift 项目中使用 LogglyLogger-CocoaLumberjack。

我在 xCode 中遇到此错误。

Enum case 'verbose' has no associated values

我无法解决这个问题。

https://prnt.sc/uznr01

我实际上是在尝试在 swift 5 中翻译 Objective-C 代码。这是我的 swift 函数

在 appDelegate.swift 类中

func initLoggly(){
        

        //      static const DDLogLevel ddLogLevel = DDLogLevelVerbose;
                let ddLogLevel:DDLogLevel = .verbose
                
        //      LogglyLogger *logglyLogger = [[LogglyLogger alloc] init];
                let logglyLogger = LogglyLogger()
        
        //      [logglyLogger setLogFormatter:[[LogglyFormatter alloc] init]];
                logglyLogger.logFormatter = LogglyFormatter()
        
        //      logglyLogger.logglyKey = @"your-loggly-api-key";
                logglyLogger.logglyKey = "XXXXXXXXXXXX-XXXXXX"
                
        //
        //        // Set posting interval every 15 seconds, just for testing this out, but the default value of 600 seconds is better in apps
        //        // that normally don't access the network very often. When the user suspends the app, the logs will always be posted.
        //      logglyLogger.saveInterval = 15;
                logglyLogger.saveInterval = 15
        
        //      [DDLog addLogger:logglyLogger];
                DDLog.add(logglyLogger)
                
        //        // Do some logging
        //      DDLogVerbose(@"{\"myJsonKey\":\"some verbose json value\"}");
        //     ddLogLevel.verbose("{\"initloggly\":\"some verbose json value\"}") // also tried this, error ==> Enum case 'verbose' cannot be used as an instance member
                DDLogLevel.verbose("{\"initloggly\":\"some verbose json value\"}") // Here is the error on this line

    }

请指出我做错了什么!

【问题讨论】:

    标签: ios swift loggly cocoalumberjack


    【解决方案1】:

    这个库很大程度上基于 C 预处理器宏,这些宏无法从 Swift 中访问。

    您可能需要在 Objective-C 中编写一小组使用这些宏的包装函数,然后又可以从 Swift 中调用。

    下面是一个例子:

    LogglyWrapper.h:

    #import <Foundation/Foundation.h>
    
    NS_ASSUME_NONNULL_BEGIN
    @interface LogglyWrapper : NSObject
    +(void) logVerbose:(NSString*) msg;
    @end
    NS_ASSUME_NONNULL_END
    

    和 LogglyWrapper.m:

    #import "LogglyWrapper.h"
    #import <LogglyLogger.h>
    
    @implementation LogglyWrapper
    static const DDLogLevel ddLogLevel = DDLogLevelVerbose;
    
    +(void) logVerbose:(NSString*) msg {
        DDLogVerbose(@"%@", msg);
    }
    @end
    

    Swift 的用法:

    LogglyWrapper.logVerbose("foo")
    

    【讨论】:

    • 感谢指导,能否提供一些链接如何根据这个库制作一个包装函数。
    • 感谢代码 sn-p。我现在遇到这个问题prnt.sc/uzw269 使用未声明的标识符 'LOG_ASYNC_ENABLED' 使用未声明的标识符 'LOG_LEVEL_DEF'
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-14
    • 1970-01-01
    • 1970-01-01
    • 2015-11-21
    • 2017-02-20
    • 1970-01-01
    相关资源
    最近更新 更多