2010-02-07 35 views
116

Tôi có 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 cá thể này. Làm thế nào để có được điều này?Lấy tên của lớp từ một cá thể

+0

Có lẽ hãy tua 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? –

+0

@ JasperBlues: Xong, thậm chí không nhận ra mức độ phổ biến của nó! – Robin

Trả lời

336

NSStringFromClass([instance class]) nên thực hiện thủ thuật.

+28

Được bỏ phiếu để trả lời câu hỏi để các googlers có thể nhận được câu trả lời, thay vì dự đoán nhu cầu. – Gleno

+2

Nhớ '#import ' để có thể gọi lớp trên một cá thể. – Raspu

26

nếu tất cả các bạn muốn làm là kiểm tra một đối tượng để xem nếu nó là một loại của một lớp nào đó

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

Cảm ơn, tôi sẽ sử dụng điều này :) – Robin

+8

Được thăng hạng để dự đoán nhu cầu thay vì chỉ trả lời câu hỏi. –

15

Từ bên trong chính lớp

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

Tuyệt đối không muốn khơi dậy sự giận dữ của bạn, nhưng đây là câu trả lời thứ hai liên quan đến iOS trong tiểu sử của bạn. Dường như với tôi để chỉ thêm rằng chúng tôi có thể tham khảo một ví dụ như "tự" 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ể cho câu trả lời được chấp nhận ba tuổi không? – danh

+0

@danh Tôi thấy bạn đang săn lùng tôi. Tốt cho bạn! –

+0

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 làm một số ribbing nhẹ nhàng, nhưng tôi biết rằng tempers được nóng khá nhanh chóng trong các thiết lập bán faceless này. Cảm ơn vì đã tốt bụng về nó. (Trên thực tế, +1 cho thực hành đóng gói). – danh

0

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

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

hoặc chỉ 'self.dynamicType' – jbg

1

Bạn cũng có thể sử dụng [[self class] description]

2

Chỉ cần thêm một thể loại:

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

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

Sau đó sử dụng đoạn mã sau:

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

hoặc thậm chí:

NSString *className = SomeObject.new.className; 

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

+0

Nếu được gọi trên lớp Swift, điều này sẽ trả về một tên lớp không gian tên. – Alper

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