哎!吵的头疼! 不上代码都是耍流氓
我个人的答案是:
我们一定要认清楚应用场景,
看情况!好吧是废话,请看代码
先弄清:
问题1:我们先来了解 什么是引用类型,而结构体是值类型。
问题2:团队用的ObjectMapper 是我们来看看是不是能支持值类型
问题3:我们来理解一下面向协议开发上几个demo
问题1的代码:
//我们先来看看结构体
let demoClass = MyClass()
let demoStruct = MyStruct(name: "赵大财", age: 18)
var demoClassMove = demoClass
var demoStructMove = demoStruct
demoClassMove.name = "赵大财G"
demoStructMove.name = "赵大财G"
print(demoClass.name , demoStruct.name) //可以看出结构体重的name并没有被改变
//ok 我们在试试数组+字典 这种最长用的模型
var dictArr = [["name":"字典赵大财1"],["name":"字典赵大财2"]]
var dictArrMove = dictArr
dictArrMove[0]["name"] = "字典赵大财1G"
print("我们看看原来的改了没", dictArr.first!["name"])
print("我们看看现在的", dictArrMove.first!["name"]) //可以看出原来的没有被改变
//OK 我们先试一试模型
let model1 = MyClass()
model1.name = "模型赵大财1"
let model2 = MyClass()
model2.name = "模型赵大财2"
var modelArr = [model1,model2]
var modelArrMove = modelArr
modelArrMove[0].name = "模型改变"
print("模型原来", modelArr[0].name)
print("模型改后", modelArrMove[0].name) //可以看出原来的没有被改变
demo2:
import ObjectMapper
struct Temperature: Mappable {
var name:String = ""
var age:String = ""
init?(map: Map) {
}
mutating func mapping(map: Map) {
name <- map["name"]
age <- map["age"]
}
}
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let dict = "{\"name\":\"赵大财\",\"age\":\"100\"}"
let structModel = Mapper<Temperature>().map(JSONString: dict)
print( structModel?.name ?? "")
}
}
协议 有点累了 有使劲再写
协议有好多的东西可以写 我们先来简单点的
// 普通协议 //扩展协议 //结构体协议 协议的协议