2014-12-07 15 views
9

Theo như tôi có thể nói, các hàm Swift có các tham số chưa đặt tên theo mặc định, nhưng các phương thức Swift không (trừ tham số đầu tiên). Ví dụ, đưa ra định nghĩa sau đây:Nhiều tham số chưa đặt tên trong các phương thức Swift

func foo(a: Int, b: Int) -> Int { 
    return a + b 
} 

class MyClass { 
    func bar(a: Int, b: Int) -> Int { 
     return a + b 
    } 
} 

tôi phải gọi foo với các thông số không tên:

foo(10, 20) // fine 

foo(a: 10, 20) // error 
foo(10, b: 20) // error 
foo(a: 10, b: 20) // error 

và tôi phải gọi bar với đối số đầu tiên vô danh, và đối số thứ hai có tên là:

MyClass().bar(10, b: 20) // fine 

MyClass().bar(10, 20) // error 
MyClass().bar(a: 10, b: 20) // error 
MyClass().bar(a: 10, 20) // error 

Tôi hiểu rằng tôi có thể thực hiện bất kỳ thông số chưa đặt tên nào có tên bằng cách sử dụng ký hiệu #, nhưng câu hỏi của tôi là: có cách nào để tôi có thể đặt cả hai đối số thành bar chưa được đặt tên?

Nói cách khác, Tôi muốn tuyên bố bar theo cách như vậy mà tôi có thể gọi nó như một chức năng bình thường:

MyClass().bar(10, 20) 

Đây có phải là có thể trong Swift? Nếu vậy, làm thế nào?

Trả lời

17

Có, bạn có tiền tố tên tham số thứ hai với _ để có nó được ẩn danh:

class MyClass { 
    func bar(a: Int, _ b: Int) -> Int { 
     return a + b 
    } 
} 
+0

Cảm ơn bạn! Đó chỉ là những gì tôi cần. – SelectricSimian

+0

Lưu ý: Trong Swift 4, bạn phải đặt '_' trước đối số đầu tiên. class MyClass { func bar (a: Int, _ b: Int) -> Int { trở lại a + b }} var g = MyClass() g.bar (3, 4) lỗi: repl .swift: 88: 7: error: thiếu nhãn đối số 'a' trong cuộc gọi –

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