2017-05-19 97 views
-1

我有以下錯誤:無法將類型Class.user的價值類型爲字符串的預期參數

enter image description here

正如你在圖上看到的,與上面的代碼感興趣的部分是本

class CourseClass: UITableViewController, CLLocationManagerDelegate, MKMapViewDelegate { 


    @IBOutlet weak var map: MKMapView! 

    struct User { 

     var name: String 
     var images: UIImage 
     var coordinate: (Double, Double) 
     var type: String 
    } 

    /* var place = ["Caffè Spagar", "Duks", "Posta station", "Barnum", "Elephant Club", "Cinema", "Space", "Andromeda", "Rodolf", "Devil Chair"] */ 

    var rows = 0 

    var users = [User]() 

    let CS = User(name: "Caffè Spagar", images: UIImage(named: "Caffè Spagar.png")! , coordinate:(12345,54678), type: "Pub") 
    let D = User(name: "Duks", images: UIImage(named: "Duks.png")! , coordinate:(13345,54128), type: "Shopping") 
    let PS = User(name: "Posta station", images: UIImage(named: "Posta station.png")! , coordinate:(18795,34556), type: "Resturant") 
    let B = User(name: "Barnum", images: UIImage(named: "Barnum.png")! , coordinate:(46655,43554), type: "Pub") 
    let EC = User(name: "Elephant Club", images: UIImage(named: "Elephant Club.png")! , coordinate:(12325,21435), type: "Disco") 
    let C = User(name: "Cinema", images: UIImage(named: "Cinema.png")! , coordinate:(11235,12343), type: "Cinema") 
    let S = User(name: "Space", images: UIImage(named: "Space.png")! , coordinate:(12345,66432), type: "Cinema") 
    let A = User(name: "Andromeda", images: UIImage(named: "Andromeda.png")! , coordinate:(64545,23443), type: "Sport") 
    let R = User(name: "Rodolf", images: UIImage(named: "Rodolf.png")! , coordinate:(64545,34358), type: "Shopping") 
    let DC = User(name: "Devil Chair", images: UIImage(named: "Devil Chair.png")! , coordinate:(56656,54678), type: "Shopping") 





    override func viewDidLoad() { 
     super.viewDidLoad() 

     map.showsUserLocation = true 
     map.delegate = self 
     users.append(CS) 
     users.append(D) 
     users.append(PS) 
     users.append(B) 
     users.append(EC) 
     users.append(C) 
     users.append(S) 
     users.append(A) 
     users.append(R) 
     users.append(DC) 



    } 



    override func viewDidAppear(_ animated: Bool) { 
     super.viewDidAppear(animated) 

     insertRowsMode3() 
    } 


    func insertRowsMode2() { 

     for i in 0..<users.count { 
      insertRowMode2(ind: i, str: users[i]) 
     } 

    } 

    func insertRowMode2(ind:Int,str:String) { 

     let indPath = IndexPath(row: ind, section: 0) 

     rows = ind + 1 
     tableView.insertRows(at: [indPath], with: .right) 
    } 

我該如何修改才能使其工作?我想知道這是否也是在代碼中實現座標的正確方法。

+1

您需要添加使用像'網友[我] .name'。 'users [i]'給你的用戶對象不是字符串對象 – Priyal

回答

0

修改insertRowMode2功能這樣,

func insertRowMode2(ind:Int,usr:User) 
{ 
    let indPath = IndexPath(row: ind, section: 0) 
    rows = ind + 1 
    tableView.insertRows(at: [indPath], with: .right) 
} 
+0

它的工作!謝謝@Sanket – bero

+0

歡迎貝羅:) –

0

看到你的功能!你聲明它像func insertRowMode2(ind:Int,str:String)這意味着你的函數接受String作爲第二個參數,當你調用這個函數時,你沒有壓縮String,因爲users[i]不會返回字符串值,因爲User是你的結構!您必須將String傳遞給該函數或將該函數的參數更改爲Any,以便它可以接受任何對象!

+0

確定清楚的說明,謝謝@Lion – bero

0

試試這個

在這裏你需要傳遞字符串而不是使用類的對象。

func insertRowsMode2() { 
     for (index, element) in users.enumerated() { 
      let user = element as! User 
       // do additional your work here 
      insertRowMode2(ind: index, user: user) 

     } 
    } 

    func insertRowMode2(ind:Int,user: User) { 

     let indPath = IndexPath(row: ind, section: 0) 

     rows = ind + 1 
     tableView.insertRows(at: [indPath], with: .right) 
    } 

或更改功能

func insertRowMode2(ind:Int,user:User) 
+0

謝謝@KKRocks,我在哪裏添加這個? – bero

+0

你需要替換你的這個func func insertRowsMo​​de2(){ – KKRocks

相關問題