无法将UIButton转发为子类

时间:2015-11-20 18:33:09

标签: ios swift cocoa-touch uibutton

我四处搜寻,无法弄清楚我做错了什么。我正在尝试将UIButton向下转换为以下代码行中的子类:

var currentButton: FileButton = UIButton(type: .System) as! FileButton

FileButtonUIButton的一个简单子类,它只使用按钮存储几个变量。代码如下:

import UIKit

class FileButton: UIButton {

     var fileAddress: String = ""
     var fileMsgId: String = ""
     var fileAppId: String = ""

}

当我尝试执行此代码时,我在控制台中收到以下错误:

  

无法转换类型' UIButton' (0x19e9c9e40)来   ' CollectionFun.FileButton' (0x100127490)。

有什么想法?这似乎应该很简单,但我无法弄明白。感谢。

3 个答案:

答案 0 :(得分:1)

只需致电:

var currentButton: FileButton = FileButton(type: .System)

答案 1 :(得分:0)

您不能在示例中向下转换对象。您创建UIButton类型对象并尝试将其转换为其他对象,而不是它的parrent,或者在继承层次结构中更高,在这种情况下,新对象具有更多功能,例如需要分配更多内存。你可以编译你的代码而不会出现这样的错误:

var currentButton = UIButton(type: .System) as? FileButton

但它将是无用的代码,因为它将始终返回nil

更清楚地说明一个例子。你可以这样做:

var button1 = FileButton()
button1.fileAddress = "qwerty"
var button2 = button1 as UIButton
var button3 = button2 as? FileButton
print(button3.fileAddress)

print

  

可选(" QWERTY&#34)

并且它将起作用,因为第一个对象是FileButton类型。

但是这段代码:

var button1 = UIButton()
var button2 = button1 as? FileButton
print(button2?.fileAddress)

将打印

  

你尝试做第二个例子

答案 2 :(得分:0)

与其他面向对象语言一样,如果将变量初始化为超类(在您的情况下为UIButton),则无法将其向下转换为子类(在您的情况下为FileButton)。这是因为您正在初始化UIButton对象,而不是FileButton。只需更改代码即可初始化FileButton对象,它应该可以正常工作。

因此,您应该将UIButton(type: .System) as! FileButton替换为FileButton(type: .System)。请注意,现在不需要强制转换,因为我们正在直接初始化FileButton对象。