如何快速调用 initWith...

Posted

技术标签:

【中文标题】如何快速调用 initWith...【英文标题】:How to call initWith... in swift 【发布时间】:2015-05-11 09:17:29 【问题描述】:

我有一个objective-c 类(RDAlertView),它创建了一个警报(ios =8 的UIAlertController)

这是 Objective-C 中的代码:

RDAlertView* alert = [[RDAlertView alloc] initWithTitle:@"Notification" 
                                                message:@"message" 
                                             completion:completion:^(NSInteger buttonIndex, NSInteger cancelButtonIndex, NSArray *textflieds)   
                                      cancelButtonTitle:@"Ok" 
                                      otherButtonTitles:nil];

[alert show];

我的问题是:如何在 Swift 中调用它而不改变我的班级(如果可能的话)?

这里是示例项目的链接:https://bitbucket.org/ejanowski/rdalertview-issue

【问题讨论】:

找到了,swift似乎不管理NS_REQUIRES_NIL_TERMINATION。感谢 Dharmesh Kheni 和 James Webster 的帮助!! 【参考方案1】:

我认为这是你需要的:

var alert = RDAlertView(title: "Notification", message: "message", completion: nil, cancelButtonTitle: "OK", otherButtonTitles: nil)
alert.show()

希望它会有所帮助。

【讨论】:

我有这个错误:“Extra argument 'title' in call”【参考方案2】:

这些方法被视为构造函数。你可以这样称呼他们:

var alert = RDAlertView("notification", message:"message", completion:nil, cancelButtonTitle:"Cancel", otherButtonTitles:nil)
alert.show()

警告:在没有 IDE 的情况下编写,注意语法错误/拼写错误

【讨论】:

这给了我一个错误:"Extra argument in call" var alert = RDAlertView("notification", message:"test messafe", completion:nil, cancelButtonTitle:"cancel", otherButtonTitles:nil) alert.show() 它可能要求第一个元素有它的标签。尝试添加:“标题:” “调用中的额外参数'title'”,可能是完成块?我是新来的 swift :s 我也很新 :P 由于语法对我来说有点新,我让自动完成来完成一些工作。我输入RDAlertView(,然后点击回车,这样我就完成了大部分语法 是的,但是 xCode 不会自动完成,它只是建议 RDAlertView()... 即使是 ctrl + 空格也只建议使用默认初始化程序。【参考方案3】:

UIAlertView 在 iOS 8 中已弃用。

您可以使用此代码显示警报:

var alert = UIAlertController(title: "Alert", message: "test", preferredStyle: UIAlertControllerStyle.Alert)

alert.addAction(UIAlertAction(title: "Click", style: UIAlertActionStyle.Default, handler: nil))

self.presentViewController(alert, animated: true, completion: nil)

【讨论】:

OP 没有使用 UIAlertView,他们使用的是自定义实现 基于 UIAlertView。在 iOS 8 中已弃用。 @Fogmeister,Adeel,对不起,但这个答案仍然是错误的。您错误地认为 RDAlertView 基于 UIAlertView。 OP在问题中澄清了这一点 @AdeelAhmed 如果你知道这个答案是错误的,你应该删除它。 :) @EricD。答案并非完全错误。它(几乎)正确地展示了如何从 Swift 中调用初始化程序,即使它使用了错误的类名。它只需要一些编辑。【参考方案4】:
UIAlertView.showWithTitle("Hello", message: "Hello World", cancelButtonTitle: "Okay")  alertView, buttonIndex in

// Do something when the alert view is clicked

let anAlertView = UIAlertView(title: "Choice", message: "Pick one", cancelButtonTitle: "No", otherButtonTitles: "Yes", "Maybe")

anAlertView.showWithCompletion  alertView, buttonIndex in

switch buttonIndex

   case 1: println("Yes")
   case 2: println("Maybe")
   default: println("No")


【讨论】:

以上是关于如何快速调用 initWith...的主要内容,如果未能解决你的问题,请参考以下文章

有许多“initWith”参数通常是不好的做法吗?

Android Gradle 插件BuildType 编译类型配置 ⑧ ( versionNameSuffix 配置 | zipAlignEnabled 配置 | initWith 方法 )

如何快速调用此函数?

如何完全卸载 SpriteKit 场景

如何在内部调用快速导出方法?

如何覆盖私有方法并快速调用超级?