2016-03-25 115 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) 
} 
相關問題