我正在嘗試初始化WidgetKit結構以對作為引數WidgetInfo的函式進行單元測驗:WidgetInfo
let widgetInfo = WidgetInfo()
這給了我錯誤: 無法構造“WidgetInfo”,因為它沒有可訪問的初始化程式
我嘗試添加:
extension WidgetInfo {
public init() {}
}
我可以初始化 - 耶!但后來我嘗試設定它的屬性之一
widgetInfo.family = .systemSmall
并得到錯誤:無法分配給屬性:'family' is a 'let' constant
我嘗試了另一個帶引數的初始化程式:
extension WidgetInfo {
public init(family: WidgetFamily, kind: String) {
self.family = family
self.kind = kind
}
}
我得到錯誤:'let' 屬性 'family' 可能無法直接初始化;改用“self.init(...)”或“self = ...”
我被卡住了 - 有沒有辦法讓我初始化WidgetInfo?或者另一種測驗WidgetInfo作為引數的函式的方法?
uj5u.com熱心網友回復:
弄清楚了。我用我需要的資訊創建了一個 WidgetInfo 協議,更改了函式以將協議作為引數并擴展了 WidgetInfo:
protocol WidgetInfoProtocol {
var widgetFamily: WidgetFamily { get }
var widgetKind: String { get }
}
extension WidgetInfo: WidgetInfoProtocol {
var widgetFamily: WidgetFamily {
return family
}
var widgetKind: String {
return kind
}
}
這讓我可以創建一個用于單元測驗的模擬:
struct MockWidgetInfo: WidgetInfoProtocol {
var widgetFamily: WidgetFamily
var widgetKind: String
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/487357.html
