无法将NSString与Swift';静态let字符串

无法将NSString与Swift';静态let字符串,swift,uikit,Swift,Uikit,我有一个ViewController子类,它可以分为多个不同的其他视图(使用单个ViewController类型)。我已经在序列图像板中的序列上放置了标识符,我想在运行时比较它们,以便向它们传递数据,如下所示: class MyListViewController : UITableViewController { static let segueNameFoo : String = "segueFoo" static let segueNameBar : St

我有一个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

当我将其更改为just
时,让segueNameFoo:String=“segueFoo”
它可以正常构建和运行


我不明白为什么它会抱怨-
segue.identifier
是一个
NSString*
,Swift支持它们之间的比较。我使用的
static let
不是为
MyListViewController
的每个实例分配
segueNameFoo
。怎么了?

问题与
String
vs
NSString
无关


您已经定义了类型属性,这些属性被引用为MyListViewController.segueNameFoo等。

因为如果这样使用,则表示segueNameFoo是实例成员

segue.identifier == segueNameFoo
等于

segue.identifier == self.segueNameFoo

因此,您应该使用MyListViewController.segueNameFoo。因此,在swift 2中,它将被视为类成员(类似于静态)

您可以使用:

let str = "string"
let nsstr:NSString = "string"
if nsstr.containsString(str){
print(true)
}else{
print(false)
}