thông số chức năng có thể có cả tên địa phương (để sử dụng trong cơ thể chức năng của) và tên bên ngoài (để sử dụng khi gọi hàm ), như được mô tả trong Tên tham số ngoài. Điều này cũng đúng với các thông số phương pháp vì các phương thức chỉ là các hàm được kết hợp với một loại. Tuy nhiên, hành vi mặc định của tên địa phương và tên bên ngoài khác nhau đối với các hàm và phương thức.
...
...
Cụ thể, Swift [làm cho] tên tham số đầu tiên trong một phương pháp một tên tham số địa phương theo mặc định, và [làm cho] các tên tham số thứ hai và sau đó cả hai địa phương và tên tham số bên ngoài theo mặc định. Quy ước này phù hợp với quy ước đặt tên và gọi thông thường, sẽ quen thuộc với việc viết các phương pháp Mục tiêu-C và thực hiện các cuộc gọi phương thức biểu cảm mà không cần phải đủ điều kiện tham số của bạn tên.
xem xét phiên bản thay thế này của lớp Counter ...
class Counter {
var count: Int = 0
func incrementBy(amount: Int, numberOfTimes: Int) {
count += amount * numberOfTimes
}
}
này incrementBy (_: numberOfTimes :) phương pháp có hai tham số-lượng và numberOfTimes. Theo mặc định, Swift xử lý số tiền dưới dạng tên địa phương chỉ , nhưng xử lý numberOfTimes dưới dạng cả tên địa phương và tên bên ngoài. Bạn gọi phương thức như sau:
let counter = Counter()
counter.incrementBy(5, numberOfTimes: 3)
// counter value is now 15
Bạn không cần phải xác định một tên tham số bên ngoài cho giá trị số đầu tiên, bởi vì mục đích của nó là rõ ràng từ tên hàm incrementBy. Đối số thứ hai, tuy nhiên, có đủ điều kiện bởi một tên tham số bên ngoài để làm cho mục đích của nó rõ ràng khi phương pháp được gọi.
hành vi mặc định này có hiệu quả xử lý các phương pháp như nếu bạn đã viết một biểu tượng thăng (#) trước khi tham số numberOfTimes:
func incrementBy(amount: Int, #numberOfTimes: Int) {
count += amount * numberOfTimes
}
Hành vi mặc định mô tả ở trên có nghĩa là định nghĩa phương pháp trong Swift được viết với cùng một kiểu ngữ pháp như Objective-C, và được gọi theo cách tự nhiên, biểu cảm.
Vì vậy, để vô hiệu hóa những tên bên ngoài của tham số thứ hai của một phương pháp bạn một cách rõ ràng có thể viết '_' cho tên bên ngoài:
Cú pháp cho bạn biết cách gọi phương thức. Trong trường hợp này, cú pháp cho bạn biết rằng có hai đối số phương pháp un-tên, vì vậy bạn gọi phương thức như thế này:
Câu trả lời hay! Cảm ơn! – rb612
Định nghĩa cuối cùng của bạn khác với 'func sayHello (người: String, anotherPerson: String) -> String {...}'? – 7stud
@ 7stud Kể từ Swift 1.2, nó phụ thuộc nếu bạn đang thực hiện một hàm hoặc một phương thức. Nếu bạn tạo một hàm độc lập, nó không khác gì. Tuy nhiên, nếu bạn khai báo bên trong một lớp (làm cho nó trở thành một phương thức), nó sẽ cho rằng tham số thứ hai (và các tham số tiếp theo) chỉ với tên nội bộ cũng đóng vai trò là tên bên ngoài. Về cơ bản, nếu 'func sayHello (person: String, anotherPerson: String) -> String' được viết dưới dạng hàm, nó sẽ trở thành' sayHello (_: _ :) '. Trong một lớp như một phương thức, nó trở thành 'sayHello (_: anotherPerson:)'. Tôi nghĩ Swift 2 đã thay đổi điều này. –