gpt4 book ai didi

swift - 检查 Swift 中是否存在函数

转载 作者:搜寻专家 更新时间:2023-10-31 19:31:46 25 4
gpt4 key购买 nike

我想在调用函数之前检查它是否存在。例如:

    if let touch: AnyObject = touches.anyObject() {
let location = touch.locationInView(self)
touchMoved(Int(location.x), Int(location.y))
}

如果存在,我想调用 touchMoved(Int, Int)。可能吗?

最佳答案

您可以使用可选的链接运算符:

这似乎只适用于定义了@optional 函数的 ObjC 协议(protocol)。似乎也需要强制转换为 AnyObject:

import Cocoa

@objc protocol SomeRandomProtocol {
@optional func aRandomFunction() -> String
@optional func anotherRandomFunction() -> String
}

class SomeRandomClass : NSObject {
func aRandomFunction() -> String {
return "aRandomFunc"
}
}

var instance = SomeRandomClass()
(instance as AnyObject).aRandomFunction?() //Returns "aRandomFunc"
(instance as AnyObject).anotherRandomFunction?() //Returns nil, as it is not implemented

奇怪的是,在上面的示例中,协议(protocol)“SomeRandomProtocol”甚至没有为“SomeRandomClass”声明......但是如果没有协议(protocol)定义,链接运算符会给出错误 - 至少在 Playground 上是这样。似乎编译器需要先前声明的函数原型(prototype)才能使 ?() 运算符工作。

似乎那里可能有一些错误或工作要做。

有关可选链接运算符及其在这种情况下如何工作的更多信息,请参阅“深度快速互操作性” session 。

关于swift - 检查 Swift 中是否存在函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24174422/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com