2014-10-12 29 views
6

Tôi đã đi qua giới thiệu của Apple để Swift và đã xem qua ví dụ như:Loại ((Int) -> Int) có nghĩa là gì trong Swift?

func makeIncrementer() -> ((Int) -> Int) { 

    func addOne(number: Int) -> Int { 
     return 1 + number 
    } 
    return addOne 

} 
var increment = makeIncrementer() 
increment(7) 

bạn có thể vui lòng giải thích cú pháp của kiểu trả về của hàm makeIncrementer? Tôi hiểu rằng hàm này trả về một hàm khác, nhưng vai trò của ((Int) -> Int) trong ngữ cảnh này vẫn chưa rõ ràng đối với tôi.

+0

(Là một kiểu trả về là không ngay lập tức có liên quan, mặc dù nó mang đến một ví dụ thú vị: nó cũng có thể là một loại một biến, ví dụ.) – user2864740

Trả lời

7

Nó chỉ ra rằng hàm trả về hàm và hàm trả về đó lấy một tham số đầu vào Int và trả về một số Int.

Xác định các hàm trong các hàm là hoàn toàn hợp pháp trong Swift.

2

(Int -> Int) biểu thị việc đóng (hoặc chức năng) tham số Int làm thông số và trả lại Int.

Cú pháp để khai báo một kiểu đóng cửa là:

(parameters) -> (return_types) 

parameters là một danh sách các thông số đóng cửa nhận như là đầu vào, và return_types là danh sách các giá trị lợi nhuận đóng cửa. Cả hai đều là bộ dữ liệu, nhưng trong trường hợp có một tham số hoặc một kiểu trả về, dấu ngoặc đơn xác định tuple có thể được bỏ qua. Vì vậy, ví dụ như một clousure mong đợi một tham số và trả về một giá trị có thể được định nghĩa là:

parameter -> return_type 

Trong trường hợp của bạn:

Int -> Int 

là một đóng cửa có tham số 1 đầu vào của Int loại và trả về một Int

Loại trả lại được đính kèm trong dấu ngoặc đơn để làm rõ rằng đó là kiểu trả về, nhưng bạn cũng có thể viết nó là:

func makeIncrementer() -> Int -> Int { 

Đó là theo ý kiến ​​của tôi ít đọc hơn

func makeIncrementer() -> (Int -> Int) { 
1

Tôi không hẳn là quen thuộc với cú pháp của nhanh chóng, nhưng tôi đoán tất cả các chức năng bậc cao làm việc như nhau.makeIncrementer là một hàm rằng:

  • mất không thông số
  • trả về một chức năng đó:
    • mất một tham số Int
    • trả về một Int

trực quan giải thích (a -> b nghĩa một hàm mang theo gõ a như các tham số và trả về kiểu b):

 makeIncrementer -> (Int -> Int) 
         ^
          | 
          | 
          a function that takes an Int and returns an Int, 
          i.e. (addOne in your case) 

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