2015-06-03 34 views
8

Tôi đã lập trình Swift trong một vài tháng và tôi luôn tò mò về điều này ...Ưu điểm của trình biên dịch Swift là kiểu của đối tượng, thay vì suy luận?

Có một lợi thế nào khi nói với trình biên dịch Swift kiểu của một đối tượng trong khai báo của nó? I.e. let image: UIImage = UIImage()

So với NOT, không cho trình biên dịch biết và có suy ra loại khi chạy. I.e let image = UIImage()

Tôi nghĩ sẽ hiệu quả hơn khi nói cho trình biên dịch loại đối tượng thay vì có suy ra kiểu. Tôi biết câu hỏi này cũng thu hút cú pháp Objective-C, vì vậy tôi sẽ thêm nó vào các thẻ.

Trả lời

10

Không có chênh lệch hiệu suất thời gian chạy giữa hai lần. Trong quá trình biên dịch, Swift đang suy ra loại và viết nó cho bạn. Nhưng một khi được biên dịch, hai câu lệnh giống hệt nhau.

Đó hoàn toàn là câu hỏi về khả năng đọc và, đôi khi, hiệu quả biên dịch.

Khả năng đọc vì trong tuyên bố let image: UIImage = UIImage(), diện mạo đôi của UIImage chỉ là sự lộn xộn. Và trong trường hợp các loại phức tạp hơn, điều đó là rất cần thiết - không ai muốn viết let keys: LazyForwardCollection<MapCollectionView<Dictionary<String, Int>, String>> = dict.keys khi họ có thể viết let keys = dict.keys.

biên dịch hiệu quả bởi vì thỉnh thoảng bạn sẽ thấy rằng một loại đặc biệt nhập nhằng (literals các chữ được nổi tiếng cho việc này), nơi nhiều quá tải cần phải được giải quyết có thể biên dịch một nhiều nhanh hơn nếu bạn đặt tên rõ kiểu dữ liệu ở bên trái -mặt bên. Nhưng đây chỉ là một câu hỏi về việc nó biên dịch nhanh như thế nào, không phải nhanh như thế nào khi nó được biên dịch.

2

Từ Swift Documentation:

Nó là hiếm hoi mà bạn cần phải viết chú thích loại trong thực tế. Nếu bạn cung cấp một giá trị ban đầu cho một hằng hoặc biến tại thời điểm đó nó được định nghĩa, Swift hầu như luôn luôn có thể suy ra các loại được sử dụng cho rằng không đổi hoặc biến, như mô tả trong Type Safety and Type Inference

Vì vậy, Nó không nếu bạn khai báo kiểu cá thể hay không.

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