2016-09-20 18 views
9

Khi tôi tạo ra một chức năng, tôi có thể làm cho một tham số tùy chọn bằng cách cho nó một giá trị mặc định, như thế này:Function với khối hoàn thành tùy chọn trong Swift

func foo(bar: String = "foobar") {} 

Tôi muốn làm như vậy (làm cho nó không bắt buộc) với một khối hoàn thành. Tôi đã thử các cách sau:

func foo(completionBlock: (foo: String) ->() =() ->()) 
func foo(completionBlock: (foo: String) ->() = (foo: String) ->()) 
func foo(completionBlock: (foo: String) ->() = ((foo: String) ->())) 
func foo(completionBlock: (foo: String) ->() = ((foo: String) in)) 
func foo(completionBlock: (foo: String) ->() = {(foo: String) in}) 

Tôi làm cách nào để thực hiện việc này?

EDIT:
Đây là/là một câu hỏi trùng lặp, xin lỗi vì điều đó. Tuy nhiên, tôi không thể tìm ra giải pháp trong câu hỏi ban đầu. Vì vậy, câu trả lời nathan là tốt nhất

Trả lời

9

Trong Swift 3:

func foo(completionBlock: (String) ->() = { _ in }) {} 
+1

Điều này không cần phải thực hiện @escaping cho completionBlock vì nó hoàn toàn không thoát khỏi Swift3.0? – Cyrus

8

Nếu bạn muốn để mặc định nil:

func foo(completionBlock: ((String) ->())? = nil) { 

} 

Nếu bạn muốn cung cấp một khối hoàn thành mặc định:

func defaultCompletionBlock(foo: String) { 

} 

func foo(completionBlock: ((String) ->()) = defaultCompletionBlock) { 

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