2014-06-28 14 views
13

tôi đang học Swift và cần phải gọi phương pháp của tôi trên vòi nước, đây là mã:Swift - Làm thế nào để gọi Selector() trên phương thức với các đối số?

var gestureRecognizer = UITapGestureRecognizer() 
myView.addGestureRecognizer(gestureRecognizer) 
gestureRecognizer.addTarget(self, action: Selector(dismiss(nil))) 

này trả về lỗi - Could not find an overload for init that accepts the supplied arguments

Tôi cũng đã cố gắng như Selector("dismiss:nil")Selector("dismiss(nil)") không có may mắn ..

đây là phương pháp tôi đang kêu gọi:

func dismiss(completion: (() -> Void)!) { 
    self.dismissViewControllerAnimated(true, completion: completion) 
} 
+3

Câu trả lời mà bạn tham chiếu không trả lời được câu hỏi này, đó là yêu cầu cách chuyển đối số cho hàm. bỏ qua() vs bỏ qua (theParameter: String) chẳng hạn. – Scooter

Trả lời

17

Chỉ cần sử dụng tên của meth od như là một chuỗi:

gestureRecognizer.addTarget(self, action: "dismiss:") 

Chỉnh sửa: Trong Swift 3.0 bạn sẽ phải sử dụng cú pháp sau:

gestureRecognizer.addTarget(self, action: #selector(dismiss(_:))) 
7

Bạn không vượt qua đối số trong selectors. Bạn chỉ đại diện cho rằng có một dấu hai chấm. Ngoài ra, bạn không phải sử dụng loại Bộ chọn. Nếu bạn vượt qua trong một chuỗi chữ, nó được chuyển đổi thành một Selector cho bạn.

gestureRecognizer.addTarget(self, action:"dismiss:") 
+15

Sau đó, bạn vượt qua các đối số ở đâu? –

Các vấn đề liên quan