NSStringFromClass
为类引用提供完全限定的类名,例如<ClassName>".self"
NSStringClassFromString
为类AnyClass
等完全限定的类名提供类<AppId>"."<ClassName">
的类引用。
但它对NSManagedObject
的子类的行为有所不同。
让我们说AppId是&#34; MyApp&#34;。
class Foo: NSObject {}
@objc(Bar)
class Bar: NSManagedObject {}
print(NSStringFromClass(Foo.self)) // MyApp.Foo
print(NSStringFromClass(Bar.self)) // Bar
print(NSClassFromString("Foo")) // nil
print(NSClassFromString("Bar")) // MyApp.Bar
print(NSClassFromString("MyApp.Foo")) // MyApp.Foo
print(NSClassFromString("MyApp.Bar")) // nil
在动态创建NSClassFromString
输入时,这会导致问题,例如通过连接AppId&#39;类名由MyClass.self
确定。似乎NSManagedObject
的子类不属于Apps命名空间。
很有意思。这些功能是可逆的。
let fco = NSClassFromString(NSStringFromClass(Foo.self))
let fct = NSClassFromString(NSStringFromClass(fco!))
// fco == fct
let bco = NSClassFromString(NSStringFromClass(Bar.self))
let bct = NSClassFromString(NSStringFromClass(bco!))
// bco == bct
但是中间结果不同,正如您可以在上面的列表中看到的那样。
严肃的问题:这是一个错误还是一个功能?如果它是一个功能,原因和优势是什么。
答案 0 :(得分:0)
我从我的游乐场得到了什么,它与你的结果不同......
pvcreate /dev/sdb
Physical volume "/dev/sdb" successfully created
vgcreate vgluks /dev/sdb
Volume group "vgluks" successfully created
lvcreate -l 90%FREE -n lvdocker-data vgluks
WARNING: crypto_LUKS signature detected on /dev/vgluks/lvdocker-data at offset 0. Wipe it? [y/n]: y
Wiping crypto_LUKS signature on /dev/vgluks/lvdocker-data.
Logical volume "lvdocker-data" created.
lvcreate -l 100%FREE -n lvdocker-metadata vgluks
Logical volume "lvdocker-metadata" created.