Swift 中的 PerformSelector 的替代品?

2023-12-26

The performSelector方法族在 Swift 中不可用 https://developer.apple.com/library/prerelease/ios/documentation/swift/conceptual/buildingcocoaapps/interactingwithobjective-capis.html。那么如何才能调用一个方法呢?@objc对象,其中要调用的方法是在运行时选择的,并且在编译时不知道?NSInvocation显然在 Swift 中也不可用。

我知道在 Swift 中,你可以发送任何方法(其中有一个@objc方法声明可见)到类型AnyObject, 如同id在 Objective-C 中。但是,这仍然需要您在编译时对方法名称进行硬编码。有没有办法在运行时动态选择它?


使用闭包

class A {
    var selectorClosure: (() -> Void)?

    func invoke() {
        self.selectorClosure?()
    }
}

var a = A()
a.selectorClosure = { println("Selector called") }
a.invoke()

请注意,这并不是什么新鲜事,即使在 Obj-C 中,新 API 也更喜欢使用块而不是performSelector(比较UIAlertView它使用respondsToSelector: and performSelector:调用委托方法,使用新的UIAlertController).

Using performSelector:总是不安全并且不能很好地与 ARC 配合使用(因此 ARC 警告performSelector:).

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Swift 中的 PerformSelector 的替代品? 的相关文章

  • 为什么 UICollectionView didSelect 方法不起作用?

    我已经创建了我的UICollectionView以编程方式 在这种情况下我的didSelectItemAtIndexPath方法根本不调用 let collectionView UICollectionView frame CGRect x
  • 在 Swift 中寻找“退出”等价物[重复]

    这个问题在这里已经有答案了 我尝试把exit 0 在一个小型测试 命令行 程序中 Xcode 给出了一条错误消息 指出Use of unresolved identifier exit 这让我很困惑 因为这个问题 https stackov
  • 返回 Self 的协议函数

    我有一个返回对象副本的协议 P protocol P func copy gt Self 和一个实现 P 的 C 类 class C P func copy gt Self return C 但是 我是否将返回值设置为Self我收到以下错误
  • 扩展可能不包含存储的属性,但为什么允许静态

    扩展不能包含存储属性 但是为什么扩展中可以定义静态存储属性呢 我也没有找到任何文档提到扩展中允许静态属性 extension String static let test Test static var test2 Test2 扩展名不能包
  • 在 Swift 中获取 UIImage 的主颜色

    我正在尝试在 Swift 中获取 UIImage 的主颜色 并尝试移植这段代码 https stackoverflow com questions 13694618 objective c getting least used and mo
  • Swift - 本地通知不会被触发

    我正在 Swift 3 中编码 我只是想发送通知now没有任何延迟或间隔 然而 通知永远不会被触发 这是我的代码 视图控制器代码 import UserNotifications class HomeViewController UIVie
  • 在 Android 上使用 opus 剪辑从 IOS 发送的声音

    我正在 IOS 中从 audioUnit 录制音频 用 opus 编码字节并通过 UDP 将其发送到 android 端 问题是播放的声音有点削波 我还通过将原始数据从 IOS 发送到 Android 来测试声音 效果非常完美 我的 Aud
  • 如何将导航栏大标题转换为多行,居中对齐

    我正在尝试设计具有多行居中大标题文本的视图控制器 就像苹果的 Ask Siri Settings gt General gt Keyboards gt About Ask Siri Dictation and Privacy 我可以使用以下
  • 在 Cocoa OS X AVPlayer 中播放 HLS (m3u8) - Swift

    基本上我正在尝试在 Cocoa Swift 中使用 AVPlayer 播放 m3u8 HLS Live Stream 我对这门语言比较陌生 所以基本上掌握了一些示例代码 http qiita com ono matope items 23d
  • Swift:使具有相同“形状”的两种类型符合通用协议

    我有两种不同的类型 它们代表相同的数据 并且具有完全相同的 形状 这两种不同的类型是代码生成的 我被迫处理它们 但是 我想让它们符合一个通用的协议 这样我就可以对这两种类型一视同仁 这是一个例子 假设这是我所坚持的两种代码生成类型 stru
  • 无法在 ios 应用程序中通过 googlecast 正确投射视频

    我正在开发一个基于 AVPlayer 的自定义视频播放器项目 尝试整合谷歌演员 我已经根据谷歌图进行了集成 https codelabs developers google com codelabs cast videos ios http
  • 如何使用 CNContacts 快速获取手机号码?

    我有一些代码可以检索用户联系人中的所有电话号码 但只想过滤掉手机号码 目前 我只是通过将第一个数字为 或第二个数字为 7 的数字添加到数组中来实现此目的 如下所示 func findContacts gt CNContact let key
  • 如何使用 alamofire 通过基本身份验证上传图像?

    我正在尝试使用 alamofire 4 7 1 和此代码上传图像 但说实话 我怀疑我没有编写正确的代码来上传图像 func uploadDefect defectRemark String defectLocation String def
  • 如何在 iOS 13 中将 UISegmentedControl 的背景颜色设置为白色

    iOS 13 对 UISegmentedControl 进行了一些更改 包括切换所选片段时的非常漂亮的动画 但是我注意到它没有显示backgroundColor属性正确 它似乎总是有一点色彩 我见过回答如何设置的问题selectedSegm
  • Swift:长按手势识别器 - 检测轻击和长按

    我想连接一个动作 如果手势是点击 它会以特定的方式为对象设置动画 但如果按下持续时间超过 0 5 秒 它会执行其他操作 现在 我刚刚连接了动画 我不知道如何区分长按和点击 如何访问新闻持续时间以实现上述目的 IBAction func ta
  • 在 WKWebView 中禁用缩放?

    有谁知道在 WKWebView 中禁用双击和捏缩放的简单方法 我尝试过的任何方法都不起作用 Webview scrollView allowsMagnification false Error value of type WKWebView
  • SwiftUI:隐藏键盘但显示光标

    我想使用自定义按钮将文本输入到TextField 但仍显示并移动光标 有没有办法隐藏默认键盘 同时仍然显示光标 我希望有这样的事情 TextField text text keyboardType none 这是它目前的样子 您可以使用UI
  • 关闭捕获上下文 Swift

    当我尝试更改闭包中的变量时出现此错误 A C function pointer cannot be formed from a closure that captures context 是否有解决方法或者仍然可以更改闭包内的变量 My C
  • 在 Object 子类及其自己的子类上实现ignoreProperties()

    我是领域新手 我正在使用继承自 Object 的基类以及该基类的自定义子类创建模型 我的模型要求基类通过覆盖静态来声明一些属性被忽略ignoredProperties 方法 当尝试在某些基类子类上重写该方法时 我收到一个 Swift 编译器
  • 致命错误:在 Swift 中解包可选值时意外发现 nil

    所以我试图获取 Swift 中输入字段的文本 这就是我得到的 class ViewController UIViewController IBOutlet var passwordField UITextField IBOutlet var

随机推荐

  • 在行为方面,如何仅运行一个场景?

    我有一个 行为 功能 对其进行了大量测试 我只需要运行一个特定的场景来满足开发需求 我该怎么做 最好在命令行上 如果您想对该功能运行单个测试 请使用 n or name标志似乎想要后面的文本Scenario behave n This is
  • 由于表变异,触发器无法执行

    我想知道这个问题是什么问题 当我执行存储过程时 它不断向我显示此错误 我的目标是在使用存储过程将数据更新到表中之前 我想检查用户输入的触发器中的错误 SQL gt exec PRC PAY TRIP 1031 2031 Cash 200 B
  • Selenium 2 WebDriver NoClassDefFoundErrorS

    我正在与Selenium 2 WebDriver在 Eclipse 中一切正常 但是 当我想在没有 Eclipse 的情况下测试我的 WebDriver 测试用例时 会发生许多丢失的类 首先它开始于 NoClassDefFoundError
  • 使用 Scala 读取 Excel 文件

    我正在编写一个快速测试 使用电子表格中的数据注册用户 想法是转到网站 gt 单击注册 gt 读取Excel行A1和B1的电子邮件和密码 gt 在注册网站上使用此数据 gt 完成注册 gt 注销 gt 使用A2和B2行中的信息注册新用户 gt
  • UICollectionView不显示图片[重复]

    这个问题在这里已经有答案了 我正在显示所有目录中的图片 但是它不显示图片 我将 NSLog 放入代码中 以便我可以找出哪些代码正在运行 并且我只在日志中得到 j 我在日志中没有看到 a 你觉得哪里不对 void viewDidLoad su
  • 更新 Spacy 的内置 NER 模型而不是覆盖

    我正在使用 Spacy 的内置模型en core web lg并想使用我的自定义实体来训练它 在这样做的同时 我面临两个问题 它会用旧数据覆盖新的训练数据 并导致无法识别其他实体 例如 训练之前 它可以识别 PERSON 和 ORG 但是训
  • importxml google 电子表格 - 新 Google 表格中出现“无法解析 xml 内容”错误

    我试图从谷歌电子表格上的链接获取一些详细信息 Link http www justdial com Gurgaon Travel Agents ct 302 http www justdial com Gurgaon Travel Agen
  • Silverlight 3 中的剪贴板支持

    我正在考虑开发一个在 DataGrid 中显示大量信息的 Silverlight 应用程序 我希望以某种方式让用户能够通过剪贴板将其复制到 Excel 中 这在 Silverlight 3 中可能实现吗 不可以 SL3 中不提供此功能 请阅
  • 我需要在 BlackBerry Webworks 应用程序中嵌入 > 4MB 的内容文件(适用于 BlackBerry 6/7)。我有什么选择?

    我正在开发一个内容丰富的 Webworks 应用程序 为了使应用程序有用 它需要维护一个本地内容数据库 SQL 形式大约 4MB 进一步减少数据库的唯一方法是删除整个内容类别 我最初的想法是 我将 SQL 文件嵌入到应用程序中 就像 CSS
  • 如何以编程方式滚动到 WinRT 中文本框的底部?

    我正在为 WinRT 编写一个简单的应用程序 但我无法找到一种在代码中自动滚动到文本框底部的方法 我正在将日志信息写入文本框 并希望它滚动 以便最新的条目在框中可见 但似乎没有任何效果 以下是我尝试过的一些事情 将文本框放置在 Scroll
  • Kafka - 代理:消息大小太大

    I get Message size too large当我尝试发送超过 1 Mb 大小的消息时出现异常 当我尝试生成消息时 该错误出现在我的客户端应用程序中 经过一番谷歌搜索后 我发现应该更改设置以增加最大消息大小 嗯 我在 kafka
  • Popover segue 到静态单元 UITableView 导致编译错误

    我目前有一个带有两个视图控制器的应用程序 第一个是具有嵌入式表视图的视图控制器 该表视图具有动态单元格 第二个是带有静态单元格的表视图控制器 如果我通过选择动态表的单元格之一将 Segue 添加到静态表视图控制器 使用 Push 或 Mod
  • 在 Netbeans 中更快地搜索文件

    是否有现有的插件或调整可以加速 Netbeans 中的 转到文件 搜索 与 Eclipse 相比 Netbeans 搜索速度太慢 特别是如果有多个大型项目 I know I can use CTRL O for Go To Type but
  • fopen什么时候会失败?

    在我的 PHP 代码中 我打开一个文件并向其中附加文本 我使用这段代码 ourFileHandle fopen ourFileName a or die can t open file 当加载 PHP 页面时会发生这种情况 现在如果两个人同
  • 如何从程序中删除日志调试语句

    我在用boost log作为我的 C 程序的记录器 在开发过程中我经常这样使用它 例如 define LOG severity BOOST LOG SEV boost logger get severity define LOG ERR L
  • 学习嵌入式编程的最佳平台? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 我可以在生产中使用 IOSurface 框架录制屏幕吗

    如果我使用 IOSurface 框架制作我的应用程序的视频 苹果会拒绝我的应用程序吗 是的 如果您链 接 IOSurface Apple 将拒绝您的应用程序 商店中的一些项目正在使用它 但他们可能会在运行时加载它 iOS 应用 Displa
  • Swift 2 将 Json 解析为数组的可选

    我正在从网络服务获取国家 地区列表 收到后我用这段代码来处理它 if let json try NSJSONSerialization JSONObjectWithData data options as NSDictionary trig
  • 在 AWS Step Functions 中,可以使用静态字符串格式化参数值吗?

    在 AWS Step Functions 中 我们可以使用以下语法将之前步骤中的参数用作输入 Parameters Details weight product weight unit grams 举个例子 说product weight
  • Swift 中的 PerformSelector 的替代品?

    The performSelector方法族在 Swift 中不可用 https developer apple com library prerelease ios documentation swift conceptual build