当你使用 plank 命令自动生成一个类时
./plank --objc_class_prefix=PUG --no_runtime --no_recursive user.json
分析
在 JSON 目录下, 执行如上命令后, 生成的 PUGUser 对象, 会自带 copyWithBlock: 方法, 这个方法是用来做什么的 ?
copyWithBlock:
(注意末尾有一个冒号,因为它需要一个 Block 参数)是 Plank 为 每一个不可变模型类自动生成的“便捷变异”接口。它的核心作用可以概括为:
-
在保持原对象不可变的前提下做局部修改
- Plank 生成的
PUGUser
属性全部是readonly
。想改动其中某个字段时,你不能直接赋值,只能构造一个新实例。 copyWithBlock:
会先用当前对象创建一个 Builder (PUGUserBuilder
),把现有属性拷贝过去 → 你在 Block 里改 Builder 的可写属性 → Plank 再把 Builder build 成一个全新的PUGUser
并返回。
- Plank 生成的