[英]How to find a class instance name in other class in swift?
Imagine a situation that we have two classes like these:想象一下我们有两个这样的类的情况:
class MyClass {
func printInstanceName() {
print(what?);
}
}
class User {
var firstObject: MyClass!
var secondObject: MyClass!
}
I will instantiate an object of class User like this:我将像这样实例化 User 类的对象:
let user = User();
user.firstObject = MyClass()
user.secondObject = MyClass()
How should i implement the printInstanceName
that the output of code below我应该如何实现下面代码输出的
printInstanceName
user.firstObject.printInstanceName()
user.secondObject.printInstanceName()
be是
firstObject
secondObject
The purpose of doing this is, i want to know from which instance of MyClass
in User
, printInstanceName
is called!这样做的目的是,我想知道从
User
中MyClass
哪个实例调用printInstanceName
!
You cant get property name from MyClass, only from User.您无法从 MyClass 获取属性名称,只能从 User 获取。
class MyClass { }
class User {
var myObject: MyClass!
func printInstanceName() {
let mirror = Mirror(reflecting: self)
for (label, value) in mirror.children {
if type(of: value) == Optional<MyClass>.self {
print(label!)
}
}
}
}
let u = User()
u.printInstanceName()
Use String(describing: type(of: self))
to print the class name.使用
String(describing: type(of: self))
打印类名。
class MyClass {
func printInstanceName() {
print(String(describing: type(of: self)))
}
}
Don't use force-unwrapped variables unnecessarily.不要不必要地使用强制解包的变量。 You can create an
init(myObject:)
instead.你可以创建一个
init(myObject:)
来代替。
class User {
var myObject: MyClass
init(myObject: MyClass) {
self.myObject = myObject
}
}
Create User
instance like,创建
User
实例,如,
let user = User(myObject: MyClass())
user.myObject.printInstanceName()
You can get variable name only in this way只能通过这种方式获取变量名
class MyClass {
func printInstanceNameIn(user: User) {
let mirror = Mirror(reflecting: user)
for (label, value) in mirror.children {
if let value = value as? MyClass, value === self {
print(label!)
}
}
}
}
class User {
var firstObject: MyClass!
var secondObject: MyClass!
}
let u = User()
u.firstObject = MyClass()
u.secondObject = MyClass()
u.firstObject.printInstanceNameIn(user: u)
I know this is not what you're exactly looking for but it might helps:我知道这不是您正在寻找的内容,但它可能会有所帮助:
for child in Mirror(reflecting: user).children {
print(child.label)
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.