2016-08-30 16 views
7

Tôi có một chức năng tương tự như sau:thiết lập các giá trị như nhau cho nhiều thông số nhanh chóng

func stamp(documentURL: NSURL, saveURL: NSURL) { 
     ...} 

Tôi muốn để có thể cho phép một người nào đó đặt cả của những tham số nếu họ muốn. Nhưng nếu họ chỉ đặt tham số đầu tiên, tôi muốn saveURL = documentURL. Có cách nào để làm điều này trong khai báo hàm?

Trả lời

1

Không có cách nào để làm điều này trong t bản thân anh ta khai báo hàm, tuy nhiên bạn có thể thực hiện nó trong một dòng của thân hàm bằng cách sử dụng tham số tùy chọn với mặc định là nilnil coalescing operator.

func stamp(documentURL: NSURL, saveURL: NSURL? = nil) { 
    let saveURL = saveURL ?? documentURL 

    // ... 
} 

Ưu điểm của làm nó theo cách này là saveURL là không bắt buộc trong cơ thể chức năng, giúp bạn tiết kiệm từ việc sử dụng các nhà điều hành có hiệu lực Unwrap sau.

1

SWIFT 2

func stamp(documentURL: NSURL, var saveURL: NSURL? = nil) { 
    if saveURL == nil { 
     saveURL = documentURL 
    } 
} 

SWIFT 3

func stamp(documentURL: NSURL, saveURL: NSURL? = nil) { 
    var saveURL = saveURL 
    if saveURL == nil { 
     saveURL = documentURL 
    } 
} 
+0

Sử dụng 'var' không được khuyến khích trong các hàm Swift vì nó sẽ bị xóa trong Swift 3. Chỉ cần tạo biến cục bộ có cùng tên. – ozgur

+0

@ ozgur cảm ơn tôi đã cập nhật thêm 3 phiên bản an toàn nhanh chóng –

+0

Vì vậy, tôi đoán không có cách nào để làm trong khai báo hàm? –

3

Trong Swift 2.3, 3:

func stamp(documentURL: NSURL, saveURL: NSURL?) { 
    var saveURL = saveURL 
    if saveURL == nil { 
     saveURL = documentURL 
    } 
} 
+0

Nó cũng áp dụng cho Swift 2.3. – ozgur

+0

Cảm ơn bạn @ ozgur – pedrouan

+0

Tôi đoán không có cách nào để thực hiện việc này trong khai báo hàm mà không có mã trong nội dung? –

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