swift - ivar_getTypeEncoding swift 返回 ""

标签 swift

像这样的代码:

测试类

class test {
    var name: String!
    var age: String!
    var pu: Int!
}

测试函数

func variableMap() {
    let ivars = class_copyIvarList(test.self, &temp.count)
    if ivars != nil {

        for i in 0..<Int(temp.count) {
            let thisIvar: Ivar = ivars[i]
            let type = ivar_getTypeEncoding(thisIvar)
            let str = String(CString: type, encoding: NSUTF8StringEncoding)
            var key = String(UTF8String: ivar_getName(thisIvar))
            let type1 = String(CString: type, encoding: NSProprietaryStringEncoding)


            print("\(key!)")
            print("\(type1!)")
        }
        free(ivars)
    }
}

但是打印

name

age 

pu

问题:

我使用 let type = ivar_getTypeEncoding(thisIvar) 但返回“”而不是属性的类型。我该如何解决这个问题?

最佳答案

Swift 可能正在使用内部包装器将这些 ivars 桥接到 ObjC 中。我能让它工作的唯一方法是在 ObjC 中定义类 test:

@interface test : NSObject

@property NSString * name;
@property NSString * age;
@property int pu;

@end

您可以在那里定义所有属性,然后在 Swift 中扩展该类。

你的代码也有错误:

let type1 = String(CString: type, encoding: NSProprietaryStringEncoding)
                                            ^ should be NSUTF8StringEncoding

关于swift - ivar_getTypeEncoding swift 返回 "",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37604429/

相关文章:

Swift:重复的 try catch 代码

ios - iOS URL方案或不存在的通用链接

swift - 为什么保存被管理对象上下文变化的是Deleted值?

swift - 尝试将 double 从一个 View 传递到另一个 View ,但它不起作用

swift - MacOS Quartz Event Tap 监听错误事件

swift - 在 Swift 中使用具有相同变量名的可选绑定(bind)

swift - Swift 中 for 循环内的加法或减法

swift - UICollectionViewDatasource 如何通知 UICollectionView 有关更改?

database - 从 firebase 数据库检索数据并快​​速操作

ios - 在另一个 View Controller 中调用方法,但不继续调用它?