Lấy tên của lớp từ một ví dụ


142

Tôi có một vấn đề sau: Tôi nhận được một thể hiện của một lớp được thông qua và muốn biết tên của lớp của trường hợp này. Làm thế nào để có được điều này?


Có lẽ điều chỉnh lại câu hỏi của bạn hoặc chấp nhận câu trả lời phù hợp với câu hỏi?
Jasper Blues

@JasperBlues: Xong, thậm chí còn không nhận ra mức độ phổ biến này!
Robin

Câu trả lời:


396

NSStringFromClass([instance class]) nên làm thủ thuật.


33
Được khuyến khích để trả lời câu hỏi để các nhân viên của Google có thể nhận được câu trả lời, thay vì dự đoán nhu cầu.
Gleno

2
Hãy nhớ để #import <objc/objc-runtime.h>có thể gọi lớp trên một ví dụ.
JP Illanes

28

nếu tất cả những gì bạn muốn làm là kiểm tra một đối tượng để xem đó có phải là một loại Class nhất định không

BOOL test = [self isKindOfClass:[SomeClass class]];

18

Từ trong lớp học

-(NSString *) className
{
    return NSStringFromClass([self class]);
}

2
Tuyệt đối không muốn khơi dậy sự tức giận của bạn, nhưng đây là câu trả lời thứ hai liên quan đến iOS trong hồ sơ của bạn. Tôi dường như chỉ thêm rằng chúng ta có thể gọi một cá thể là "bản thân" từ bên trong việc thực hiện nó. Bạn có bảo vệ điều này khi bổ sung đáng kể vào câu trả lời được chấp nhận của ba tuổi không?
danh

@danh Mình thấy bạn đang săn lùng tôi. Tốt cho bạn!
Katedral Pillon

Xin lỗi, tôi chỉ cần nhấp vào cái này và tranh luận về việc có nên nói gì không. Chỉ muốn thực hiện một số động tác nhẹ nhàng, nhưng tôi biết rằng nhiệt độ nóng lên khá nhanh trong các thiết lập bán vô danh này. Cảm ơn vì đã tốt bụng về nó. (Trong thực tế, +1 để thực hành đóng gói).
danh

2
Điều này không thêm gì vào câu trả lời ngoại trừ rắc rối.
Nikolai Ruhe

1
Nên biến nó thành một phương thức lớp học
Bhumit Manyhadia

2

Chỉ cần thêm một danh mục:

NSObject+Extensions.h
- (NSString *)className;

NSObject+Extensions.m
- (NSString *)className {
    return NSStringFromClass(self.class);
}

Sau đó sử dụng mã sau đây:

NSString *className = [[SomeObject new] className];

hoặc thậm chí:

NSString *className = SomeObject.new.className;

Để sử dụng nó ở bất cứ đâu, hãy thêm danh mục vào tệp YourProject.pch.


Nếu được gọi trên một lớp Swift, nó sẽ trả về một tên lớp được đặt tên.
Alper


1

OBJC:

NSStringFromClass([instance class])

NHANH

Từ ví dụ:

String(describing: YourType.self)

Từ loại:

String(describing: self)

0

Nếu bạn đang tìm cách lấy tên lớp trong Swift, bạn có thể sử dụng phản chiếu để lấy thông tin về đối tượng.

let tokens = split(reflect(self).summary, { $0 == "." })
if let typeName = tokens.last {
    println(typeName)
}

hoặc chỉself.dynamicType
jbg
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.