我有一个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
。所以它看起来像类成员(类似于静态的)