我有一个ViewController子类,它分成多个不同的其他视图(使用单个ViewController类型)。我在Storyboard中的segue上放了标识符,我想在运行时比较它们,所以我可以将数据传递给它们,如下所示:
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
。什么了?
答案 0 :(得分:1)
该问题与String
vs NSString
无关。
您已定义类型属性,这些属性被引用为MyListViewController.segueNameFoo
等。
答案 1 :(得分:1)
因为如果你这样使用它意味着segueNameFoo是实例成员
segue.identifier == segueNameFoo
等于
segue.identifier == self.segueNameFoo
所以你应该使用MyListViewController.segueNameFoo
。所以它看起来像是类成员(与静态类似)
答案 2 :(得分:0)
在swift 2中你可以使用它:
let str = "string"
let nsstr:NSString = "string"
if nsstr.containsString(str){
print(true)
}else{
print(false)
}