2016-03-25 77 views
1

我有一个ViewController子类,它可以分成多个不同的其他视图(使用单个ViewController类型)。我已经把标识在故事板的塞格斯,我想他们在运行时比较,所以我可以将数据传递给他们,就像这样:无法将NSString与Swift的静态字符串进行比较

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的实例。这是怎么回事?

回答

1

引用因为如果你使用这样就意味着segueNameFoo是实例成员

segue.identifier == segueNameFoo 

等于

segue.identifier == self.segueNameFoo 

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

1

该问题与String vs NSString无关。

您已经定义类型属性,这些都为MyListViewController.segueNameFoo

0

在SWIFT 2,你可以使用这个:

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