我需要在按下UIButton时调用其他函数(在我的情况下,将数据从UIDatePicker和UITextField传递到EKCalendar以创建一个事件,所以我不能只在IBAction函数中写入它{}} 这是我的功能:
func insertEvent(store: EKEventStore) {
let calendars = store.calendarsForEntityType(EKEntityTypeEvent)
as! [EKCalendar]
for calendar in calendars {
if calendar.title == "todo" {
let startDate = myDatePicker.date
let endDate = startDate.dateByAddingTimeInterval(2 * 60 * 60)
// Create Event
var event = EKEvent(eventStore: store)
event.calendar = calendar
event.title = nameTextField.text
event.startDate = startDate
event.endDate = endDate
// Save Event in Calendar
var error: NSError?
let result = store.saveEvent(event, span: EKSpanThisEvent, error: &error)
if result == false {
if let theError = error {
println("An error occured \(theError)")
}
}
}
}
}
我应该写什么:
@IBAction func addReminder(sender: UIButton) {
}
调用我上面写的函数。
我试过通过在insertEvent()
内键入IBAction func {}
来调用它,但在警告中“警告”参数#1在调用中缺少参数...“也尝试使用参数调用它也给了我警告......
我还尝试为按钮(不是动作)类型的segue创建一个插座,然后使用
func addReminder(sender: UIButton) {
if sender === addReminder {}
}
但它给了我同样的错误......真是个诅咒!
如何将此功能分配给按钮,可能还有其他方法?
P.S。:我是Xcode 6.3
答案 0 :(得分:1)
您面临的问题是您如何宣布insertEvent
。你有两个选择。
声明它就像你一样 - 但是理解你需要在你的电话中声明参数:
func insertEvent(store: EKEventStore) {
// do something here
}
并称之为:
@IBAction func addReminder(sender: UIButton) {
insertEvent(store: myEKEventStoreVariable)
}
更多" Swiftier"方法是在函数声明中放置一个下划线,这使得函数调用不需要参数:
func insertEvent(_ store: EKEventStore) {
// do something here, again, note the underscore
}
电话是:
@IBAction func addReminder(sender: UIButton) {
insertEvent(myEKEventStoreVariable)
}
基本上你是对的 - 你不能"嵌入"您的IBAction中的函数声明,因此您需要将该逻辑移动到"外部"功能。但是你以一种需要参数名称的方式声明了这个函数。