传递对象时无法指定类型的值

时间:2016-01-25 17:06:35

标签: ios swift

模态类

class Trip: NSObject {

    var tripTitle: String
    var tripSummary: String

   static var trips = [Trip]()

    init(tripTitle: String, tripSummary: String) {
        self.tripTitle = tripTitle
        self.tripSummary = tripSummary

    }

   class func addTrip(tripTitle: String, tripSummary: String){

            let t = Trip(tripTitle: tripTitle, tripSummary: tripSummary)

           trips.append(t)
        }

}

在控制器

@IBAction func previewButtomPressed(sender: UIButton) {
        let tripTitle = tripTitleTxt.text!
        let tripSummary = tripSummaryTxt.text!



        Trip.addTrip(tripTitle, tripSummary: tripSummary)



}

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if segue.identifier == "ShowTripPreviewTableViewController" {


        let tripPreviewTableViewController = segue.destinationViewController as! TripPreviewTableViewController
         tripPreviewTableViewController.trip = Trip //here I am getting an error
    }
}

错误

Cannot assign value of type 'Trip.Type' to type 'Trip'

tripPreviewTableViewController

var trip : Trip!

3 个答案:

答案 0 :(得分:2)

我不知道你tripPreviewTableViewController.trip的类型是什么,但对我来说更有意义:

tripPreviewTableViewController.trip = Trip.trips

修改

两种方法:

1)您将tripPreviewTableViewController.trip的类型更改为[Trip]?。分配值时,您可以执行tripPreviewTableViewController.trip = Trip.trips

2)您可以访问Trip内的tripPreviewTableViewController课程。

答案 1 :(得分:2)

在您的情况下,由于trips静态变量,您 NOT 需要通过segue传递任何内容。

只需在目的地视图(Trip.trips

中询问TripPreviewTableViewController

答案 2 :(得分:2)

正如其他人所指出的那样,你不能将一个Class类型赋给一个代表该类实例的变量,因为Class不是一个实例。

但是,如果您的班级代表旅行,为什么要上课:

  • 有一个静态类变量来保存一系列行程?

  • 有一个类方法可以创建一个新的行程并将其附加到行程数组中吗?

如果您的类要表示单个行程,则它应该仅封装引用实例行程的属性和方法。

看起来你似乎也在试图滥用这个课程作为一个“全球”模型,它碰巧举行了一系列的旅行。如果你想跟踪一系列旅行,那么如果你在Trip课程之外存储了一系列旅行,它将使你的代码更容易理解和维护(对你和他人而言)。