【发布时间】:2016-03-28 15:10:22
【问题描述】:
我正在开发一个 iOS 应用程序,我正在使用 swift。为了提高可读性和组织功能,我在我的 swift 文件中使用了扩展。
// MARK: Class Declaration
class PaymentView
{
// Some stuffs
}
// MARK: Lifecycle methods
extension PaymentView
{
// Overriden for adding gesture recogniser
override func awakeFromNib()
{
super.awakeFromNib()
// Causes a crash when tapped on view
let tapGesture = UITapGestureRecognizer(target: self, action: Selector("paymentViewSelected:"))
self.addGestureRecognizer(tapGesture)
// Works correctly !!!
paymentViewSelected(tapGesture);
}
}
// MARK: Private Methods
extension PaymentView
{
private func paymentViewSelected(sender : UITapGestureRecognizer)
{
print("Method called")
}
}
我的问题是当我点击视图时应用程序崩溃并出现unrecognised selector 错误。如果我从方法中删除 private 访问控制说明符,它会完美运行。
我的问题是,无论private,我都可以直接从awakeFromNib 调用paymentViewSelected:。但是为什么它在用作选择器时会崩溃?
根据Swift AccessControl Reference
私人访问将实体的使用限制在其自己的定义范围内 源文件。使用私有访问隐藏实现细节 一个特定的功能。
但我的课程、扩展名、手势都在同一个文件中。我想我在这里遗漏了一些基本的关键概念。请帮助我理解这个问题。
【问题讨论】:
-
看来你只需要将
@objc添加到private方法中。见stackoverflow.com/questions/25056278/… -
@sbarow:感谢您的链接,它解决了问题
标签: ios swift private uitapgesturerecognizer