我正在玩Swift中的一些内省,看起来如果你想在一个可打印的版本中得到一个对象的类,这些是最好的选择.(在beta 6.0中引入).
_stdlib_getTypeName(someClass)
_stdlib_getDemangledTypeName(someClass) // A slightly cleaner version
Run Code Online (Sandbox Code Playgroud)
我希望找到其他内省方法,但不幸的是,点击方法的命令将我带到Swift标题,并且它们没有在那里声明.
我的另一种选择是键入_stdlib并等待自动完成或控制空间以查看我的选项.不幸的是,这些方法都没有自动完成.
是否存在声明这些和其他stdlib函数的文件,或者是否存在这些方法的文档?
我通过从领域中的技巧和窍门的博客文章找到了答案,我的问题在这里 -值得注意的是,由JP锡马德职.
在这些方面查看其他方法的最佳方法是转到您的终端并键入:
cd `xcode-select -p`/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/macosx
Run Code Online (Sandbox Code Playgroud)
然后输入以下内容:
nm -a libswiftCore.dylib | grep "T _swift_stdlib"
Run Code Online (Sandbox Code Playgroud)
这将为您提供所有可用功能的读数,如下所示:
00000000001a43c0 T _swift_stdlib_NSObject_isEqual
00000000001a4490 T _swift_stdlib_NSStringHasPrefixNFD
00000000001a44f0 T _swift_stdlib_NSStringHasSuffixNFD
00000000001a4450 T _swift_stdlib_NSStringNFDHashValue
00000000001a2650 T _swift_stdlib_atomicCompareExchangeStrongPtr
00000000001a2670 T _swift_stdlib_atomicCompareExchangeStrongUInt32
00000000001a2690 T _swift_stdlib_atomicCompareExchangeStrongUInt64
00000000001a2700 T _swift_stdlib_atomicFetchAddUInt32
00000000001a2710 T _swift_stdlib_atomicFetchAddUInt64
00000000001a26f0 T _swift_stdlib_atomicLoadPtr
00000000001a26d0 T _swift_stdlib_atomicLoadUInt32
00000000001a26e0 T _swift_stdlib_atomicLoadUInt64
00000000001a26b0 T _swift_stdlib_atomicStoreUInt32
00000000001a26c0 T _swift_stdlib_atomicStoreUInt64
00000000001a4410 T _swift_stdlib_compareNSStringDeterministicUnicodeCollation
000000000017c560 T _swift_stdlib_conformsToProtocol
00000000001a5a80 T _swift_stdlib_demangleName
000000000017c8e0 T _swift_stdlib_dynamicCastToExistential1
000000000017c6f0 T _swift_stdlib_dynamicCastToExistential1Unconditional
00000000001a5910 T _swift_stdlib_getTypeName
Run Code Online (Sandbox Code Playgroud)
我还没有找到任何文档,但很多这些函数名称都是相当明确的,人们总是可以通过尝试来发现它们!
| 归档时间: |
|
| 查看次数: |
1536 次 |
| 最近记录: |