无法将NSString与Swift的静态let字符串进行比较

时间:2016-03-25 06:29:03

标签: swift uikit

我有一个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.identifierNSString*而Swift支持==之间的比较。我对static let的使用是为segueNameFoo的每个实例分配MyListViewController。什么了?

3 个答案:

答案 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)
}