Polymorphism and SwiftUI

后端 未结 1 1542
情歌与酒
情歌与酒 2021-01-13 21:57

Given the following example:

class ProfileTab: Identifiable {
    let id = UUID()
    let name: String

    init(name: String) {
        self.name = name
            


        
相关标签:
1条回答
  • 2021-01-13 22:16

    In the described use-case the polymorphism would look like the following (or in some variations):

    class ProfileTab: Identifiable {
        let id = UUID()
        let name: String
    
        init(name: String) {
            self.name = name
        }
    
        func view() -> AnyView {
            AnyView(EmptyView())
        }
    }
    
    class ProfileQuoteTab: ProfileTab {
        let answer: String
        let prompt: String
    
        init(name: String, answer: String, prompt: String) {
            self.answer = answer
            self.prompt = prompt
            super.init(name: name)
        }
    
        override func view() -> AnyView {
            AnyView(Text(self.answer))
        }
    }
    
    class ProfileImageTab: ProfileTab {
        let image: Image
    
        init(name: String, image: Image) {
            self.image = image
            super.init(name: name)
        }
    
        override func view() -> AnyView {
            AnyView(self.image)
        }
    }
    
    struct ContentView: View {
        let tabs: [ProfileTab] = [
            ProfileQuoteTab(name: "This is a quote tab", answer: "This is an answer", prompt: "This is a prompt"),
            ProfileImageTab(name: "This is an image tab", image: Image(systemName: "faceid"))
        ]
    
        var body: some View {
            List(self.tabs) { tab in
                VStack {
                    tab.view()
                }
            }
        }
    }
    
    0 讨论(0)
提交回复
热议问题