记录个oc的结构体在Swift中无法识别的问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了记录个oc的结构体在Swift中无法识别的问题相关的知识,希望对你有一定的参考价值。
参考技术A 分析:oc的结构体内 包含oc对象时,是无法在swift中识别。如:
struct Theme
UIColor *backgroundColor;
该结构体在swift中无法识别。
解决:
将此类结构体改为类来实现,或者 将oc对象改为void *指针。
Swift:发送到实例的无法识别的选择器
【中文标题】Swift:发送到实例的无法识别的选择器【英文标题】:Swift: unrecognized selector sent to instance 【发布时间】:2015-09-29 12:19:21 【问题描述】:为什么这不起作用:
self.backButton?.addTarget(self, action: Selector("backButtonPressed:"), forControlEvents: .TouchUpInside)
// unrecognized selector sent to instance CRASH
func backButtonPressed(sender:AnyObject?)
此崩溃到(发送到实例的无法识别的选择器)
func backButtonPressed(sender:UIButton)
【问题讨论】:
实际为我工作,无需任何修改。 我尝试了这两个功能,但它们都崩溃了。消息:-[MyApp.HeaderView backButtonPressed:]: unrecognized selector sent to instance 0x7f9bd8432c70 【参考方案1】:如果我没记错的话,您已经在另一个方法中声明了您的 backButtonPressed
方法,如下所示:
override func viewDidLoad()
super.viewDidLoad()
let button = UIButton(frame: CGRectMake(150, 240, 75, 30))
button.setTitle("Next", forState: UIControlState.Normal)
button.addTarget(self, action: Selector("backButtonPressed:"), forControlEvents: UIControlEvents.TouchUpInside)
button.backgroundColor = UIColor.greenColor()
self.view.addSubview(button)
func backButtonPressed(sender:AnyObject?)
print("Called")
// Do any additional setup after loading the view, typically from a nib.
这是错误的方式。
在外面声明你的方法,如下代码所示:
override func viewDidLoad()
super.viewDidLoad()
let button = UIButton(frame: CGRectMake(150, 240, 75, 30))
button.setTitle("Next", forState: UIControlState.Normal)
button.addTarget(self, action: Selector("backButtonPressed:"), forControlEvents: UIControlEvents.TouchUpInside)
button.backgroundColor = UIColor.greenColor()
self.view.addSubview(button)
func backButtonPressed(sender:AnyObject?)
print("Called")
【讨论】:
啊,谢谢.. 不小心在另一个方法里面添加了方法【参考方案2】:在 swift 上你不再需要编写选择器了
self.backButton?.addTarget(self, action: "backButtonPressed:", forControlEvents: .TouchUpInside)
【讨论】:
【参考方案3】:替换您的操作参数 - 选择器,如:
self.backButton?.addTarget(self, action: #selector(self. backButtonPressed(sender:)), for:. touchUpInside)
自 Swift 3 起,选择器语法已更改,如下所示。 在选择器名称中使用字符串字面量很容易出错:甚至无法检查字符串是否是格式良好的选择器,更不用说它是否引用任何已知方法或预期的方法班级。 此外,为了执行 Objective-C API 的自动重命名,Swift 名称和 Objective-C 选择器之间的联系并不明显。通过基于方法的 Swift 名称提供显式的“创建选择器”语法,我们无需开发人员推理正在使用的实际 Objective-C 选择器。
【讨论】:
以上是关于记录个oc的结构体在Swift中无法识别的问题的主要内容,如果未能解决你的问题,请参考以下文章
Swift - 无法识别的选择器发送到 SDWebImage 方法上的实例