Tại sao tôi có thể có một mảng [AnyObject]
và đặt một loạt các loại kích thước khác nhau trong đó ...Tại sao các số nguyên không tuân theo giao thức AnyObject?
var a = [AnyObject]()
a.append(Int(1))
a.append(Float64(3.14))
a.append(Bool(true))
... trừ Int32
và Int64
....
a.append(Int32(1)) // err: type 'Int32' does not conform to protocol 'AnyObject'
a.append(Int64(1)) // err: type 'Int64' does not conform to protocol 'AnyObject'
Các tài liệu cho AnyObject
nói:
"AnyObject có thể đại diện cho một cá thể của bất kỳ loại lớp nào"
Nhưng khi tôi chỉ huy-click vào Int
, Int32
hoặc Int64
để xem định nghĩa thư viện tiêu chuẩn của các loại, tôi thấy rằng họ là tất cả struct
giá trị.
Vấn đề cơ bản ở đây là gì? Tại sao điều này được thiết kế như thế này?
Cảm ơn bạn đây là một câu trả lời xuất sắc. Bạn có biết liệu có bất kỳ tài liệu nào về loại chuyển đổi tiềm ẩn nào không? Tôi cho rằng điều này vượt xa chỉ là 'NSInteger'. –
Yup, nó được đề cập trong [Sử dụng Swift với Cocoa và Objective-C] (https://developer.apple.com/library/ios/documentation/Swift/Conceptual/BuildingCocoaApps/WorkingWithCocoaDataTypes.html#//apple_ref/doc/ uid/TP40014216-CH6-XID_42) iBook. Nhưng hãy lưu ý rằng nó đã thay đổi trong phiên bản Xcode 6.3 beta và cuốn sách chỉ phản ánh hành vi phiên bản phát hành, vì vậy tốt nhất bạn nên kiểm tra ghi chú phát hành Xcode khi bạn thử nâng cấp. –
BTW Bạn có nghĩa là NSNumber chứ không phải NSInteger tôi giả định? –