美文网首页selectorSwift开发指导
Swift4.0--用@objcMembers填平的辣些坑

Swift4.0--用@objcMembers填平的辣些坑

作者: Phant | 来源:发表于2018-05-10 17:38 被阅读1337次

KVC

在Swift4.0版本中,使用KVC的setValuesForKeys()方法进行赋值时,每次都会崩在setValuesForKeys这个方法中:

Snip20180510_6.png
查了一下,果然万能的小伙伴们已经找到原因啦~~kkk
在swift3中,编译器自动推断@objc,换句话说,它自动添加@objc
在swift4中,编译器不再自动推断,你必须显式添加@objc
还有一种更简单的方法,不需要一个一个属性的添加,方法如下:
//在类的前面加上@objcMembers
@objcMembers class Person: NSObject {

}

运行时

Snip20180510_8.png

类的属性前面需要加上@objc关键词或者在类前面加上@objcMembers关键词,否则运行时访问不了类的属性
原因:在Swift4中,继承NSObject的swift class不再默认全部bridge到OC,如果我们想要使用的话 我们就需要在class前面加上@objcMembers这个关键字。

注:在Swift3中,除了

手动添加 @objc 声明函数支持OC调用

还有另外一种方式:

继承 NSObject

class继承了NSObject后,编译器就会默认给这个类中的所有函数都标记为@objc,支持OC调用。
苹果在Swift4中,修改了自动添加@objc的逻辑:

一个继承NSObject的Swift类不在默认给所有函数添加@objc。只在实现OC接口和重写OC方法时,才自动给函数添加@objc标识。
import UIKit

@objcMembers class Person: NSObject {
    
    var name: String?
    var age: Int = 0
    var title: String?
    
    class func propertyList() -> [String] {
    
        var count: UInt32 = 0
       let list = class_copyPropertyList(self, &count)
        print("属性的数量 \(count)")
        for i in 0..<Int(count) {
            let pty = list?[i]
            let cName = property_getName(pty!)
            let name = String(utf8String: cName)
            print(name ?? "")
        }
        return []
    }
}

参考:https://www.jianshu.com/p/f165ab3a12b0

相关文章

  • Swift4.0--用@objcMembers填平的辣些坑

    KVC 在Swift4.0版本中,使用KVC的setValuesForKeys()方法进行赋值时,每次都会崩在se...

  • 心里有了坑 怎样才能填平

  • 把坑填平

    进化的意义很多时候,不一定是发挥优势,毕竟拥有优势的人不多,更可能的是,让你有信心发展自己的劣势。比如,家境不够好...

  • 勇敢和慈悲在智慧的练习中自然呈现

    随着自我成长有序进行,原先那些坑坑洼洼的部分似乎已经填平许多,可在现实中走到那个填平的坑凼位置一不小心,人踩在填平...

  • swift 对象使用runtime的class_copyProp

    在swift用runtime获取对象的属性时, 对象要加 @objcMembers 才能获取到

  • 52 Weeks of Habits-实践篇

    自己挖的坑,哭着也得填平。 今天试着用Chales Munger的“一生只有20次机会”方法来探讨人生:) 作为自...

  • 铁锹

    风儿把雨水吹来又吹走 说起雨水 我就想起了蛙声 每到夏天,每到下雨 你就把冲走的泥土用铁锹 填平一个坑又一个坑 那...

  • 学日语的坑,日语学习应该注意的6个地方

    你可以用大约5分钟得到日语学习应该注意的6个地方 不只是学日语,学什么都有坑,只有把这些坑都填平了以后的学习才会事...

  • 学日语的坑,日语学习应该注意的6个地方

    你可以用大约5分钟得到日语学习应该注意的6个地方 不只是学日语,学什么都有坑,只有把这些坑都填平了以后的学习才会事...

  • 学日语的坑,这六个地方你要小心了!

    你可以用大约5分钟得到日语学习应该注意的6个地方 不只是学日语,学什么都有坑,只有把这些坑都填平了以后的学习才会事...

网友评论

    本文标题:Swift4.0--用@objcMembers填平的辣些坑

    本文链接:https://www.haomeiwen.com/subject/qpctdftx.html