我有很多时间试图将我的代码转换为Cocoapod / Framework。
所以我有一些代码,我想要打包到框架(F),然后在App(A)中使用它。然而,当我尝试构建A(链接F)时,它几乎正常工作,其中A中的源引用了F中的日志,我收到错误
Ambiguous reference to member 'log'
这是因为log在我的F源代码中定义为名为Logging.swift的文件,如下所示:
import Foundation
import XCGLogger
// MARK: - Logging
let log: XCGLogger = {
let log = XCGLogger(identifier: "mainLogger", includeDefaultDestinations: false)
// Create a destination for the system console log (via NSLog)
let systemDestination = ConsoleDestination(identifier: log.identifier+".console")
// configure it here, omitted for brevity
// Add the destination to the logger
log.add(destination: systemDestination)
// Add basic app info, version info etc, to the start of the logs
log.logAppDetails()
return log
}()
我的问题是:
i)我如何摆脱这个错误?我猜它与指定哪个模块正在记录它有关,因为还有其他模块也有日志。 (达尔文,CoreGraphics等)
ii)如何设置我的日志记录,以便在框架F代码中记录的任何内容也可以包含在App A的同一记录器中?这是可能的还是必要的?
答案 0 :(得分:2)
我相信我现在可以回答我自己的问题了:
我将Framework的Logging.swift文件更改为:
public struct Log {
public static var main: XCGLogger = {
let log = XCGLogger(identifier: "mainLogger", includeDefaultDestinations: false)
// Create a destination for the system console log (via NSLog)
let systemDestination = ConsoleDestination(identifier: log.identifier+".console")
// Optionally set some configuration options (omitted for brevity)
// Add the destination to the logger
log.add(destination: systemDestination)
// Add basic app info, version info etc, to the start of the logs
log.logAppDetails()
return log
}()
}
然后它有一个默认记录器。我使用Log.main
引用对日志的调用在我的应用程序A中,我可以定义自己的记录器,只需指定它:
Log.main = myOtherLog