【问题标题】:Cannot compare NSString with Swift's static let string无法将 NSString 与 Swift 的静态 let 字符串进行比较
【发布时间】:2016-03-25 06:29:02
【问题描述】:

我有一个 ViewController 子类,它分为多个不同的其他视图(使用单个 ViewController 类型)。我已经在 Storyboard 中的 segues 上放置了标识符,我想在运行时比较它们,以便将数据传递给它们,如下所示:

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 的使用是为了不为MyListViewController 的每个实例分配segueNameFoo。怎么了?

【问题讨论】:

    标签: swift uikit


    【解决方案1】:

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

    segue.identifier == segueNameFoo
    

    等于

    segue.identifier == self.segueNameFoo
    

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

    【讨论】:

      【解决方案2】:

      该问题与StringNSString 无关。

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

      【讨论】:

        【解决方案3】:

        在 swift 2 中你可以使用这个:

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

        【讨论】:

          猜你喜欢
          • 2013-07-28
          • 2020-06-08
          • 2017-05-14
          • 2019-10-27
          • 1970-01-01
          • 2021-09-04
          • 1970-01-01
          • 2012-10-06
          • 2019-01-22
          相关资源
          最近更新 更多