使用KVC设置无法访问的属性。这是建议吗?
我想要更改Apple框架不允许的UIDatePicker
文字颜色。
我可以使用KVC编辑属性吗?
datePicker.setValue(UIColor.whiteColor(), forKey: "textColor")
这是一个很好的编程习惯吗?因为我们使用KVC访问私人财产
答案 0 :(得分:1)
由于无法访问,我认为您的意思是“私有API”。
这种方法存在两个问题:
如果您将应用提交到商店,Apple将拒绝您的应用;主要原因是:
私有API是私有的,因此开发人员不会依赖它们:通常API仍然在Apple内部正在进行中,因此规范可能会在未来的操作系统版本中发生变化。 Apple可以使用私有API,因为 - 当然 - 每次更新操作系统时,他们都有机会更新所有预安装的应用程序。但第三个依赖它们的派对应用程序可能会破坏。
如果您计划在内部,B2B,企业,越狱等发布您的应用程序,您不必担心拒绝;但是,当你的用户从iOS 9升级到iOS 10时,你的应用程序崩溃的可能性仍然存在。
编辑:在考虑之后,我不确定Apple是否可以检测到您对私有财产的KVC访问权限;毕竟,你没有调用任何私有方法(包括getter / setter)。但我不知道他们如何“扫描”他们审查的应用程序,所以......
答案 1 :(得分:0)
这是一个很好的编程习惯吗?
没有
为什么?
它违反了oop的基础知识。对象提供了一组您可以信赖的方法和属性。在它后面你不知道对象是否会在里面有这个属性。该对象可能是完全不同的东西,只是实现了可用的方法。