Tôi đã chuyển một tham số cho một hàm kiểu AnyObject vì bất kỳ thứ gì có thể được truyền cho nó. Có cách nào để có được kiểu Object được truyền, động không?Nhận loại AnyObject động trong Swift
Trả lời
Thông thường đây là những gì generics cho. Có ít khi có lý do chính đáng để có mã số AnyObject
không tương tác với ObjC. Nếu sau đó bạn thực hiện các hành động khác nhau dựa trên loại, thì có thể bạn thực sự muốn sử dụng quá tải.
Điều đó nói rằng, có một số cách để truy cập vào loại. Thông thường bạn muốn chạy đoạn mã khác nhau tùy thuộc vào loại, vì vậy bạn có thể sử dụng một switch
cho rằng:
let x:AnyObject = "asdf"
switch x {
case is String: println("I'm a string")
default: println("I'm not a string")
}
hoặc
let x:AnyObject = "asdf"
switch x {
case let xString as String: println("I'm a string: \(xString)")
default: println("I'm not a string")
}
Hoặc bạn có thể sử dụng một nếu:
if let string = x as? String {
println("I'm a string: \(string)")
}
Xem "Nhập Casting cho Bất kỳ và AnyObject" trong Ngôn ngữ lập trình Swift để thảo luận thêm.
Nhưng một lần nữa, trừ khi bạn đang làm việc với mã ObjC, ít khi có lý do để sử dụng Any
hoặc AnyObject
. Generics và overloads là những công cụ được thiết kế để giải quyết những vấn đề đó trong Swift.
đầu tiên nhập khẩu Foundation
và nếu bạn wan't loại test1 làm điều đó:
var test1 = "test"
println(_stdlib_getTypeName(test1))
Bạn sẽ nhận được "TTSS" TTSS nghĩa String.
nếu bạn cố gắng với một Int nó sẽ là TtSi (i cho int)
Hãy nhớ rằng các tên loại này là riêng tư và có thể thay đổi bất cứ lúc nào. Dấu gạch dưới hàng đầu trong tên hàm là một chỉ báo từ Apple rằng đây là một hàm nội bộ không có ý định được gọi từ bên ngoài stdlib. –
Sử dụng số nhận dạng chưa được giải quyết '_stdlib_getTypeName' – Sander
Không rõ ý bạn là "loại" trong câu hỏi của bạn. Đối với mọi giá trị của bất kỳ loại nào trong Swift, bạn có thể có loại thời gian chạy động như sau:
theVariable.dynamicType
Những gì bạn có thể làm với nó là một câu hỏi khác.
Swift 3 phiên bản với gợi ý @jojodmo 's:
type(of: theVariable)
Điều này sẽ là anwser cho câu hỏi này. –
Trong Swift 3, nó đã được thay đổi thành 'type (of: theVariable)' – Jojodmo
func testType(value:AnyObject!){
if let v = value as? NSString{
println("NSString")
}else if let v = value as? NSNumber{
println("NSNumber")
}else if let v = value as? Double{
println("Double")
}else if let v = value as? Int{
println("Int")
}
}
Vui lòng thêm một số giải thích. –
- 1. Truyền AnyObject sang từ điển trong swift
- 2. Swift Mảng - sử dụng "Chứa" của loại AnyObject
- 3. Loại 'OSType' không phù hợp với giao thức 'AnyObject' trong Swift 2.0
- 4. swift 3 - ios: convert anyObject thành chuỗi
- 5. Sự khác biệt giữa Generics và AnyObject trong Swift
- 6. Xcode 8 beta 6 AnyObject Swift 3 thay đổi
- 7. Chỉ số của Swift AnyObject, nó đến từ đâu?
- 8. Swift: Loại ngữ cảnh 'AnyObject' không thể được sử dụng với từ điển theo nghĩa đen
- 9. Tại sao Swift cho phép tôi gọi setTitle trên AnyObject?
- 10. Swift: So sánh AnyObject với `is` Cú pháp
- 11. Swift - Chuyển đổi một AutoreleasingUnsafeMutablePointer <AnyObject?> giá trị
- 12. Gán một [String: AnyObject] tới [String: AnyObject] trong Swift thay thế dấu phẩy với dấu chấm phẩy
- 13. Swift - nhận loại bảo mật wifi
- 14. Ràng buộc loại trên AnyObject hoặc Bất kỳ (AnyObject hoặc Bất kỳ nào phù hợp với giao thức)
- 15. NSManagedObject.setValue (giá trị: AnyObject ?, forKey chính: String) gây ra lỗi trong Swift 2.0
- 16. Làm thế nào để gán một từ điển cho AnyObject trong swift
- 17. NSDictionary trong Swift: Không thể chỉ định giá trị của loại 'AnyObject?' với chỉ mục kiểu 'Int'
- 18. Nhận loại tệp hình ảnh lập trình trong swift
- 19. Nhận giá trị dưới dạng loại nhanh chóng từ Không được quản lý <AnyObject>. Ví dụ: ABRecordRef
- 20. Loại DarwinBoolean trong Swift
- 21. Loại công đoàn trong Swift?
- 22. Không thể chuyển đổi giá trị của loại NSMutableDictionary? để loại đối số dự kiến [NSObject: AnyObject]!
- 23. Không thể chỉ định giá trị của loại 'AnyObject?' thành một giá trị kiểu 'Chuỗi!' - Swift với Parse
- 24. trong Swift: Sự khác biệt giữa mảng VS NSArray VS [AnyObject]
- 25. Nhận loại đối tượng từ ô trống Swift Array
- 26. Loại 'AnyObject' không phù hợp với giao thức 'SequenceType'
- 27. Loại SIMD Vector trong Swift
- 28. Loại dưới cùng trong Swift
- 29. biết loại biến trong Swift
- 30. ReactiveCocoa rac_valuesForKeyPath không hoạt động trong Swift
Tôi xin nói, rằng không có một câu trả lời trong chủ đề này đã không giúp tôi. Vấn đề của tôi là tôi không thể lấy thông tin loại trong khi gỡ lỗi, để biết cách xử lý đối tượng Bất kỳ, để xem nội dung thực tế, bởi vì tôi không biết loại đối tượng Bất kỳ tôi không biết loại nào tôi cần để truyền nó để xem nội dung. Và giải pháp tốt nhất cho tôi là đưa đối tượng Bất kỳ vào NSObject và xem thuộc tính className của nó chẳng hạn: ((json ["glossary"] dưới dạng NSDictionary) ["title"] là NSObject) .className nó hiển thị cho tôi "__NSDictionaryM ", và ví dụ: – Pavel