Vấn đề:
Closure:
var pushBehavior: UIPushBehavior = {
let lazilyCreatedPush = UIPushBehavior()
lazilyCreatedPush.setAngle(50, magnitude: 50)
return lazilyCreatedPush
}()
Computed:
var pushBehavior: UIPushBehavior {
get{
let lazilyCreatedPush = UIPushBehavior()
lazilyCreatedPush.setAngle(50, magnitude: 50)
return lazilyCreatedPush
}
}
Giải pháp:
Nói ngắn gọn,
Ví dụ thứ hai là một thuộc tính được tính toán (computed property) có khối get được gọi mỗi khi bạn tham chiếu đến thuộc tính đó. Nói chung, bạn làm điều này khi thuộc tính được tính toán cần được tính toán lại mỗi khi bạn tham chiếu đến thuộc tính được lưu trữ (ví dụ: được tính toán lại từ các thuộc tính được lưu trữ khác, có thể là private).
Trong trường hợp này, bạn chắc chắn muốn thuộc tính được lưu trữ (ví dụ đầu tiên), không phải thuộc tính được tính toán (ví dụ thứ hai). Có lẽ bạn không muốn có một đối tượng mới mỗi khi bạn tham chiếu đến biến.