修改类以显示特定输出

时间:2016-04-21 20:17:30

标签: swift

我是Swift的新手,特别是在这方面遇到了一些麻烦。附件是我需要作为项目的一部分运行的一些代码。细节结束了。

 class Screen:DataSource {
    var items:[String]=[]
    func run(){
        let lv = TableView()
        items = ["John","Paul","George","Ringo"]
        let ds = self
        lv.dataSource=ds
        lv.drawList()
    }
}

class TableView {
    // This class displays a list given a DataSource
    var dataSource:DataSource?
    init (){
        self.dataSource=nil
    }

    func drawList(){
        for(var i=0;i<dataSource!.getSize();i++) {
            print("\(dataSource!.getItem(at:i))")
            print("--------------------------")
        }
    }
}

protocol DataSource {
    func getSize()->Int
    func getItem(at pos:Int)->String
}

let screen = Screen()
screen.run()

不改变&#34;运行&#34;功能/方法,我需要打印它:

John
--------------------------
Paul
--------------------------
George
--------------------------
Ringo
--------------------------

我不确定在我的Screen类中要修改什么。这就是我到目前为止所做的:

class Screen: DataSource {    
     var items: [String]=[]    
     func run() {        
          let lv = TableView()        
          items = ["John","Paul","George","Ringo"]        
          let ds = self        
          lv.dataSource=ds        
          lv.drawList()    
     }
     //NEED HELP HERE
}

任何提示将不胜感激。

1 个答案:

答案 0 :(得分:1)

使用扩展程序使Screen符合DataSource

 class Screen {
    var items:[String]=[]
    func run(){
        let lv = TableView()
        items = ["John","Paul","George","Ringo"]
        let ds = self
        lv.dataSource=ds
        lv.drawList()
    }
}

extension Screen: DataSource {
    func getSize() -> Int { return items.count }
    func getItem(at index:Int) -> String { return items[index] }
}

您也可以在类本身上放置DataSource一致性和方法,但在扩展中执行此操作是组织班级成员的常用方式。