Swift 引用方法的Objective-C选择器

Swift 引用方法的Objective-C选择器,swift,swift2.2,Swift,Swift2.2,自Swift 2.2起,以下代码给出警告: 没有使用Objective-C选择器“sync”声明方法 我应该用什么替换操作:“sync”以消除警告 我试过: Selector("sync") // The Xcode provided fix which yields the same warning #selector(tabBarController.sync()) // Error: Argument of '#selector' does not refer to initializer

自Swift 2.2起,以下代码给出警告:

没有使用Objective-C选择器“sync”声明方法

我应该用什么替换
操作:“sync”
以消除警告

我试过:

Selector("sync") // The Xcode provided fix which yields the same warning
#selector(tabBarController.sync()) // Error: Argument of '#selector' does not refer to initializer or method 
Selector(tabBarController.sync()) // No error/warning but doesn't fire sync function

我想你把动作功能“sync”放错地方了。将其保存在TabBarController中,因为您已将TabBarController的实例用作目标。下面这样的代码将起作用:

tabBarController.navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Upload", style: .Plain, target: tabBarController, action: "sync:")
在TabBarController中保留以下功能:

func sync(sender: AnyObject){
    //your code here
}

希望它能解决您的问题。:)

我想你把动作功能“sync”放错地方了。将其保存在TabBarController中,因为您已将TabBarController的实例用作目标。下面这样的代码将起作用:

tabBarController.navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Upload", style: .Plain, target: tabBarController, action: "sync:")
在TabBarController中保留以下功能:

func sync(sender: AnyObject){
    //your code here
}

希望它能解决您的问题。:)

要首先解决您的问题,请阅读Swift2.2中有关选择器的最新信息

例如: 使用
#选择器(CLASS.sync)
而不是
选择器(“sync”)
。其中类是包含此方法的实际类

这是因为这个原因:

对选择器名称使用字符串文字非常困难 容易出错:不检查字符串是否为 格式良好的选择器,更不用说它引用任何已知方法,或 预期类的方法。而且,在努力表现的同时, 自动重命名Objective-C API,Swift名称之间的链接 而Objective-C选择器不明显。通过提供明确的“创建 我们消除了基于方法Swift名称的“选择器”语法 开发人员需要对实际的Objective-C进行推理 正在使用的选择器


要首先解决您的问题,请阅读Swift2.2中有关选择器的最新信息

例如: 使用
#选择器(CLASS.sync)
而不是
选择器(“sync”)
。其中类是包含此方法的实际类

这是因为这个原因:

对选择器名称使用字符串文字非常困难 容易出错:不检查字符串是否为 格式良好的选择器,更不用说它引用任何已知方法,或 预期类的方法。而且,在努力表现的同时, 自动重命名Objective-C API,Swift名称之间的链接 而Objective-C选择器不明显。通过提供明确的“创建 我们消除了基于方法Swift名称的“选择器”语法 开发人员需要对实际的Objective-C进行推理 正在使用的选择器


#选择器(TabBarController.sync)
@AaronBrager感谢它的工作。所以它必须是类名?似乎
#选择器(self.sync)
target:self
@doovers工作是的,您指定要在特定实例(“target”)上执行的方法签名(“操作”)@AaronBrager很酷,现在有意义了,谢谢<代码>#选择器(TabBarController.sync)@AaronBrager感谢它的工作。所以它必须是类名?似乎
#选择器(self.sync)
target:self
@doovers工作是的,您指定要在特定实例(“target”)上执行的方法签名(“操作”)@AaronBrager很酷,现在有意义了,谢谢!如果“sync”方法是私有的呢?警告/错误不会消失。有解决方案吗?@PanxShaz您不能通过选择器调用private方法,因为我们缺少private函数的所有点。如果方法“sync”是private怎么办?警告/错误不会消失。有解决方案吗?@PanxShaz您不能通过选择器调用private方法,因为我们缺少private函数的所有点。