【问题标题】:Bitcast requires both operands to be pointer or neither error with Swift compilerBitcast 要求两个操作数都是指针,或者 Swift 编译器都没有错误
【发布时间】:2014-07-09 09:21:34
【问题描述】:

我在使用 Swift 时遇到了一个严重的错误,尽管进行了大量研究,但我在 Google 上没有找到任何帮助。

Bitcast 要求两个操作数都是指针或两者都不是 %116 = bitcast i8* %115 到 %SS,!dbg !249 ICmp 的操作数类型无效 指令 %117 = icmp ne %SS %116, null, !dbg !249 PHI 节点必须 至少有一个条目。如果块死了,PHI 应该是 删除! %120 = phi i32 PHI 节点操作数的类型与 结果! %119 = phi i8* [%116, %108] LLVM 错误:损坏 找到函数,编译中止!

我真的不知道这个错误发生在哪里,因为经过一些重构,我对很多文件进行了更改。

我决定创建一个问答风格的帖子,以帮助其他开发人员找出这个错误的含义。

希望对你有帮助!

【问题讨论】:

    标签: ios xcode swift


    【解决方案1】:

    在我在几个小时内评论/取消评论我项目的所有代码之后,我终于找到了导致我原来帖子中发布的错误的行。

    class LoginAccountViewController : UIViewController
    {    
        @IBOutlet var loginFacebook : UIButton?
        @IBOutlet var emailField : UITextField?
    
        override func viewDidLoad()
        {
            super.viewDidLoad()
        }
    
        override func viewWillAppear(animated: Bool)
        {
            super.viewWillAppear(animated)
        }
    
        @IBAction func loginEmail(sender: AnyObject)
        {
            if let emailAddress = emailField?.text as? String // THIS IS THE BAD LINE
            {
            }
        }
    }
    

    错误是我试图对名为text 的属性进行展开向下转换,这不是可选的,因为包含该属性的对象是可选的。这是一个很大的错误。

    很好的解决方案是对emailField 属性进行展开向下转换,然后,无需展开text 属性即可访问其值。

    if let emailAddress = emailField as? UITextField
    {
        println(emailAddress.text)            
    }
    

    【讨论】:

      【解决方案2】:

      我曾经遇到过这个问题。换行时突然修好了(skipBtn 是 UIButton)

      skipBtn.setTitleColor(.whiteColor(), forState: .Normal)
      

      skipBtn.setTitleColor(UIColor.whiteColor(), forState: .Normal)
      

      我不知道为什么,但在我看来,当你删除额外的类名时这个功能还没有 100% 支持。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-14
        • 2020-02-21
        • 2014-11-29
        • 1970-01-01
        • 2018-09-20
        • 2018-09-14
        相关资源
        最近更新 更多