我的应用程序允许人们通过 Facebook、Twitter、电子邮件和 SMS 分享他们创建的内容。这些选项中的每一个都有一个对应的 UISwitch。用户配置所有开关,然后按下“完成”按钮。对于每个开关,如果设置为“ON”,我会触发一个适当的方法(shareViaSms
、shareViaEmail
等),该方法会实例化本机 iOS 视图控制器以完成该类型的共享(TWTweetComposeViewController、MFMailComposeViewController 等)。这些视图控制器有委托回调来表示它们的完成,当一个完成时(有人发送或取消电子邮件撰写表),我需要触发他们想要使用的下一个。
我当前管理这个的代码感觉很笨拙,我正在寻找更好的解决方案。如果用户打开所有 4 个选项,我调用第一个共享方法shareViaFacebook.
,它有一个委托方法,完成后,我检查下一个共享选项的 UISwitch 状态,如果它打开,调用它的共享方法,如果没有,检查下一个开关,以此类推。每个委托的完成方法循环通过剩余的开关,并负责调用下一个共享方法。可以想象,添加一个新选项需要更改大量代码并修改许多 if/else 条件。
我该如何改进呢?我希望能够简单地查看所有 UISwitches,如果设置为“ON”,则将我相应的共享方法 ( shareViaSMS
) 添加到某个队列中,然后让该队列运行并在前一个共享方法时自动调用下一个共享方法一个完成。我很挣扎,因为如前所述,完成是异步的,并且是通过委托回调宣布的。