我有一个viewcontroller子类,它可以分割成多个不同的其他视图(使用单个viewcontroller类型)。我已经在情节串连板的段上放置了标识符,我想在运行时比较它们,这样我就可以将数据传递给它们,如下所示:

class MyListViewController : UITableViewController {

        static let segueNameFoo : String = "segueFoo"
        static let segueNameBar : String = "segueBar"

        override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
            super.prepareForSegue( segue, sender: sender )

            if segue.identifier == segueNameFoo {
                let vc : MyDetailViewController = segue.destinationViewController as! MyDetailViewController
                vc.someData = "foo"
            } else if segue.identifier == segueNameBar {
                let vc : MyDetailViewController = segue.destinationViewController as! MyDetailViewController
                vc.someData = "bar"
            }
        }
}

问题是,Xcode 7.3给出了这些错误:
静态成员segueNameFoo不能用于类型为MyListViewController的实例
静态成员segueNameBar不能用于类型为MyListViewController的实例
当我把它改成let segueNameFoo : String = "segueFoo"时,它就可以正常构建和运行了。
我不明白为什么这是抱怨-segue.identifier是一个NSString*和swift支持==之间的比较。我对static let的使用使segueNameFoo不会分配给MyListViewController的每个实例。怎么了?

最佳答案

因为如果你这样使用它意味着seguenamefoo是实例成员

segue.identifier == segueNameFoo

等于
segue.identifier == self.segueNameFoo

所以你应该使用MyListViewController.segueNameFoo。所以它看起来像类成员(类似于静态的)

10-08 09:35