iOS Swift - 在@IBAction函数中声明外部函数

时间:2017-06-11 21:39:40

标签: ios swift function ibaction xcode6.3

我需要在按下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

1 个答案:

答案 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中的函数声明,因此您需要将该逻辑移动到"外部"功能。但是你以一种需要参数名称的方式声明了这个函数。