作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试在 swift 项目中使用 SOMotionDetector
有没有办法将 Objective C 方法转换为 Swift?
- (void)motionDetector:(SOMotionDetector *)motionDetector locationChanged:(CLLocation *)location
{
...
}
最佳答案
将委托(delegate)方法从 Obj-C 转换为 Swift 与创建标准 Swift 函数类似,但有一个额外的规则:显式参数名称。
在您的示例中,它会像这样:
func motionDetector(motionDetector:SOMotionDetector locationChanged location:CLLocation)
{
// Do something here...
}
为什么我们在 location:CLLocation
的第二个参数定义前面有这个 locationChanged
?
这样您的选择器签名仍保留 motionDetector:locationChanged:
,同时允许您的方法参数名称为 location
。
让我们考虑 Obj-C 中的以下 NSURLConnection
委托(delegate):
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
如果我们将其转换为没有显式参数名称的 Swift,您就会明白为什么这很尴尬:
func connection(connection:NSURLConnection didReceiveData:NSData)
{
self.mutableData.appendData(didReceiveData); // weird local variable name...
}
现在,我们将 didReceiveData
移动为参数名称,但为了清楚起见,将局部变量名称更改为 data
:
func connection(connection:NSURLConnection didReceiveData data:NSData)
{
self.mutableData.appendData(data); // Ahhh.. much better!
}
正如您所看到的,它与标准 Swift 函数非常相似,但只需要参数名称。请注意,如果您愿意,您可以对非委托(delegate)函数执行此操作!
关于objective-c - 快速使用 SOMotionDetector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24317252/
我正在尝试在 swift 项目中使用 SOMotionDetector 有没有办法将 Objective C 方法转换为 Swift? - (void)motionDetector:(SOMotion
我是一名优秀的程序员,十分优秀!