2015-01-10 34 views
24

Tôi rất mới với ngôn ngữ nhanh chóngCó cách nào để nhanh chóng khai báo một hàm nội tuyến không?

tôi muốn tuyên bố một hàm nội tuyến giống như trong C++ để khai niềm vui của tôi là như

func MyFunction(param: Int) -> Int { 
... 
... 
... 
} 

và tôi muốn ti làm điều gì đó như

inline func MyFunction(param: Int) -> Int { 
... 
... 
... 
} 

Tôi đã cố gắng tìm kiếm trên web nhưng tôi không tìm thấy bất kỳ nội dung nào có liên quan có thể không có từ khóa nội tuyến nhưng có thể có một cách khác để nội dòng chức năng

Rất cám ơn :)

+2

Tại sao bạn muốn thực hiện việc này? – Emil

+3

Tôi muốn giảm thời gian cho cuộc gọi hàm, tôi biết nó sẽ mở rộng và mã nguồn của tôi sẽ lớn hơn nhưng tôi muốn tạo điểm chuẩn. nhưng trước tiên tôi cần biết cách làm nội tuyến nhanh chóng! – Gibnem

+1

Vâng, theo như tôi biết Swift không có chức năng nội tuyến như C++, và thành thật mà nói, tôi không thấy làm thế nào mà woulld giảm thời gian cho một cuộc gọi chức năng nào cả. Swift về cơ bản là một ngôn ngữ rất khác với C++. – Emil

Trả lời

36

Swift 1.2 sẽ bao gồm các @inline thuộc tính, với never__always như thông số. Để biết thêm thông tin, hãy xem here.

Như đã nêu trước đây, bạn hiếm khi cần khai báo hàm một cách rõ ràng là @inline(__always) vì Swift khá thông minh về thời điểm nội dòng một hàm. Tuy nhiên, không có hàm nào được gạch chân, có thể cần thiết trong một số mã.

+2

"Tuy nhiên, không có chức năng được gạch chân, có thể cần thiết trong một số mã." Bạn có thể đưa ra một ví dụ, cho mục đích giáo dục? – user965972

+0

Liên kết để biết thêm thông tin hiển thị một trường hợp sử dụng. Ví dụ: – MaddTheSane

+0

@ user965972 Chức năng đệ quy. Lưu ý rằng một số hàm đệ quy có thể được chuyển thành một vòng lặp, nhưng một số hàm vốn đã đệ quy, xem [video tuyệt vời này] (https://www.youtube.com/watch?v=i7sm9dzFtEI). –

5

Tất cả tín dụng cho số answer, chỉ cần tóm tắt thông tin từ số link.

Để thực hiện chức năng inline chỉ cần thêm @inline(__always) trước khi chức năng:

@inline(__always) func myFunction() { 

} 

Tuy nhiên, cần cân nhắc và tìm hiểu về các khả năng khác nhau. Có ba cách thể inline:

  • đôi khi - sẽ đảm bảo để đôi khi nội tuyến chức năng. Đây là hành vi mặc định, bạn không phải làm gì cả! Trình biên dịch Swift có thể tự động nội tuyến các chức năng như một tối ưu hóa.
  • luôn luôn - sẽ đảm bảo luôn luôn nội tuyến chức năng. Đạt được hành vi này bằng cách thêm @inline(__always) trước hàm. Sử dụng "nếu chức năng của bạn khá nhỏ và bạn muốn ứng dụng của mình chạy nhanh hơn".
  • không bao giờ - sẽ đảm bảo không bao giờ nội dòng chức năng. Điều này có thể đạt được bằng cách thêm @inline(never) trước hàm. Sử dụng "nếu chức năng của bạn khá dài và bạn muốn tránh tăng kích thước phân đoạn mã của bạn".
Các vấn đề liên quan