2014-10-02 17 views

Trả lời

50

Bạn không. Đây là một tính năng ngôn ngữ để ngăn chặn tác động phụ không mong muốn tiêu chuẩn của chuyển nhượng trả về một giá trị, như described in the Swift book:

Không giống như toán tử gán trong C và Objective-C, toán tử gán trong Swift không tự trả về giá trị . Tuyên bố sau đây là không hợp lệ:

if x = y { 
     // this is not valid, because x = y does not return a value 
    } 

Tính năng này ngăn chặn các toán tử gán (=) từ được sử dụng một cách tình cờ khi tương đương với toán tử (==) là thực sự mong muốn. Bằng cách làm cho nếu x = y không hợp lệ, Swift sẽ giúp bạn tránh các loại lỗi này trong mã của bạn.

Vì vậy, điều này giúp ngăn ngừa lỗi cực kỳ phổ biến này. Trong khi loại lỗi này có thể được giảm thiểu bằng các ngôn ngữ khác — ví dụ, bằng cách sử dụng Yoda conditions —nhà thiết kế Swift dường như quyết định tốt hơn là chắc chắn ở cấp độ ngôn ngữ mà bạn không thể tự bắn mình vào chân. Nhưng nó không có nghĩa là bạn không thể sử dụng:

blah = blah2 = 3 

Nếu bạn đang tuyệt vọng để làm nhiệm vụ trên cùng một dòng, bạn có thể sử dụng cú pháp tuple, nhưng bạn vẫn sẽ phải đặc biệt gán mỗi giá trị:

(blah, blah2) = (3, 3) 

... và tôi sẽ không đề xuất. Trong khi nó có thể cảm thấy bất tiện lúc đầu, chỉ cần gõ toàn bộ điều ra là cách tốt nhất để đi, theo ý kiến ​​của tôi:

blah = 3 
blah2 = 3 
+2

Đây là loại công cụ nặng mà tôi cảm thấy luôn xuất hiện trong ngôn ngữ "sớm/trẻ". Các vị thần của ngôn ngữ làm cho nó không thể viết mã họ chủ quan tìm thấy bị phản đối (đây là một ví dụ, khác là sự cần thiết để tiền tố nổi với '0' [cố gắng viết 'let x = .5' trong swift]). – dave

+2

blah = 3; blah2 = 3; –

2

Khi trả lời chấp nhận nói: Bạn có thể nhận được một số cú pháp chặt chẽ hơn, tuy nhiên bạn không thể gán từ a đến b đến c mà không cần sử dụng nhiều dòng (vì an toàn, có thể). Dưới đây là ví dụ về một số cú pháp ngắn gọn hơn để khai báo và gán nhiều biến số trong một dòng:

var red, green, blue, alpha : CGFloat 
(red, green, blue, alpha) = (0.0, 0.0, 0.0, 0.0) 
ledColor.getRed(&red, green: &green, blue: &blue, alpha: &alpha) 
+0

Bạn có thể giải thích mã trên không. thực sự tôi không thể giải mã nó :) –

+0

Bạn có hiểu hai dòng đầu tiên không? –

+0

vâng ... đã nhận tờ khai và chuyển nhượng. –

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