我相信這將是泛型,但我不確定如何實作它。我有一個簡單的結構來定義我的應用程式上的按鈕。我希望能夠以直接在傳遞Image()或與組成影像Image(systemName: String),如果用戶通過在一個String。
import SwiftUI
public struct TextFieldStepperButton {
let image: Image
let color: Color
// image: Image should accept both (String && Image)
public init(image: Image, color: Color = Color.accentColor) {
// Detect if image == String || Image then define it depending on result
self.image = image
self.color = color
}
}
有沒有辦法做到這一點?
uj5u.com熱心網友回復:
這不是泛型的問題;你只需要兩個初始化。
public init(image: Image, color: Color = Color.accentColor) {
self.image = image
self.color = color
}
// And then add a convenience that calls the other:
public init(imageNamed: String, color: Color = Color.accentColor) {
self.init(image: Image(systemName: imageNamed), color: color)
}
我建議使用不同的引數名稱(imagevs imageNamed),但image如果您愿意,您可以統一它們并用于兩者。
uj5u.com熱心網友回復:
這不需要泛型。相反,傳統上,如果您想要這種行為,您只需創建 2 個不同的初始化,一個帶有 String 引數,另一個帶有 Image 引數。Once 可能是一個“便利初始化程式”,它處理不同的輸入,但只是呼叫另一個 init(最小化復制的代碼)。像這樣:
public init(image: Image, color: Color = Color.accentColor) {
self.image = image
self.color = color
}
public init(imageNamed: String, color: Color = Color.accentColor) {
self.init(image: Image(systemName: imageNamed), color: color)
}
如果出于某種原因你真的只想要初始化程式,你可以創建 Any 型別的引數,然后輸入檢查它是 String 還是 Image,相應地處理它,如果兩者都不是,則拒絕。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/348890.html
