结构体是可以作为 model 类使用的不过也要 写下的创建方法

import UIKit
/***
创建一个model 结构,重写init 方法,
结构体的属性不能出现可选类型
**/
struct Model { var title :String
var url :String
var numId :String init(dic :NSDictionary) { self.title = (dic["title"] as? String)!
self.numId = (dic["numId"] as? String)!
self.url = (dic["url"] as? String)!
}
} class ViewController: UIViewController {
lazy var dicArr : Array<Dictionary<String, Any>>! = { var arr = Array<Dictionary<String, Any>>()
for i in ...{
var dic = Dictionary<String,Any>()
var title = String(format:"name_%f", CGFloat(i))
var numId = String(format:"numId_%d",i)
var url = String(format:"https://name -%@ - numId %@",title,numId)
dic["title"] = title
dic["numId"] = numId
dic["url"] = url arr.append(dic)
}
return arr
}() override func viewDidLoad() {
super.viewDidLoad() for dic in self.dicArr {//在这里调用下 稍后公布测试打印的结果 let model = Model.init(dic: dic as NSDictionary)
print(model.url)
}
} override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}

测试结果:

https://name -name_0.000000 - numId numId_0
https://name -name_1.000000 - numId numId_1
https://name -name_2.000000 - numId numId_2
https://name -name_3.000000 - numId numId_3
https://name -name_4.000000 - numId numId_4
https://name -name_5.000000 - numId numId_5
https://name -name_6.000000 - numId numId_6
https://name -name_7.000000 - numId numId_7
https://name -name_8.000000 - numId numId_8
https://name -name_9.000000 - numId numId_9
https://name -name_10.000000 - numId numId_10
https://name -name_11.000000 - numId numId_11
https://name -name_12.000000 - numId numId_12
https://name -name_13.000000 - numId numId_13
https://name -name_14.000000 - numId numId_14
https://name -name_15.000000 - numId numId_15
https://name -name_16.000000 - numId numId_16
https://name -name_17.000000 - numId numId_17
https://name -name_18.000000 - numId numId_18
https://name -name_19.000000 - numId numId_19
https://name -name_20.000000 - numId numId_20
https://name -name_21.000000 - numId numId_21
https://name -name_22.000000 - numId numId_22
https://name -name_23.000000 - numId numId_23
https://name -name_24.000000 - numId numId_24
https://name -name_25.000000 - numId numId_25
https://name -name_26.000000 - numId numId_26

那么问题就出现了,结构体和类做 model时候,有什么不同呢??????

Swift中的类与结构体有如下相似点:

.定义属性来存储值。

.定义函数来提供功能。

.通过定义下标语法使用下标的方式取值。

.定义构造方法来对其进行初始化。

.通过扩展来在原始基础上添加功能。

.通过协议来定义实现标准。

当然类和结构体也有许多不同点,下面这些功能是类独有的,结构体没有:

.通过继承来创建类的子类。

.在运行时允许对类的实例进行类型的检查和解释。

.析构方法可以释放被类引用的资源。

.通过引用计数允许一个类实例的多处引用。

当开发者在代码中传递这些实例时,结构体总是被赋值,而类则是被引用。这是结构体和类的最本质区别。

swift 第十一课 结构体定义model类的更多相关文章

  1. Swift类和结构体定义-备

    Swift中的类和结构体定义的语法是非常相似的.类使用class关键词定义类,使用struct关键词定义结构体,它们的语法格式如下: class 类名 { 定义类的成员 } struct 结构体名 { ...

  2. 《从零开始学Swift》学习笔记(Day 25)——类和结构体定义

    原创文章,欢迎转载.转载请注明:关东升的博客 Swift中的类和结构体定义的语法是非常相似的.类使用class关键词定义类,使用struct关键词定义结构体,它们的语法格式如下: class 类名 { ...

  3. Swift学习之类和结构体的创建

    随着一步步的学习,学习到的新知识越来越多了,不管是新的还是旧的,都禁不住时间的堆积,再熟悉的知识点时间久了都会渐渐的忘记,也许这就是人们生活中一种潜在的惰性吧,看似非常熟悉的东西,等到真正要用的时候, ...

  4. swift 的枚举、结构体、类

    一.Swift的枚举 枚举是一系相关联的值定义的一个公共的组类型,同时能够让你在编程的时候在类型安全的情况下去使用这些值.Swift中的枚举比OC中的枚举强大得多, 因为Swift中的枚举是一等类型, ...

  5. Swift中元组(Tuples),结构体(Struct),枚举(Enums)之间的区别

    Swift有许多种存储数据方式,你可以用枚举(enums),元组(tuples),结构体(structs),类(classes),在这篇文章中我们将比较枚举.元组.结构体之间区别,首先从最简单的开始- ...

  6. ARM单片机的头文件如何用结构体定义地址

    下面我们以ARM Cortex-M0内核单片机LPC1114的头文件lpc11xx.h文件进行说明. 1.先说两句 lpc11xx.h文件是lpc11xx系列单片机包含的头文件.这个文件的作用和51单 ...

  7. C#中结构体定义并转换字节数组

    最近的项目在做socket通信报文解析的时候,用到了结构体与字节数组的转换:由于客户端采用C++开发,服务端采用C#开发,所以双方必须保证各自定义结构体成员类型和长度一致才能保证报文解析的正确性,这一 ...

  8. C语言结构体定义的几种方法

    什么是结构体? 在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggregate data type)的一类.结构体可以被声明为变量.指针或数组等,用以实现较复杂的数据 ...

  9. 将c语言的结构体定义变成对应的golang语言的结构体定义,并将golang语言结构体变量的指针传递给c语言,cast C struct to Go struct

    https://groups.google.com/forum/#!topic/golang-nuts/JkvR4dQy9t4 https://golang.org/misc/cgo/gmp/gmp. ...

随机推荐

  1. windwos服务器 无法与本地电脑进行复制粘贴解决办法

    之前复制粘贴功能可以使用  现在突然间不能使用了 1.打开任务管理器,查看进程,如果有 rdpclip.exe 进程,先关闭该进程2.开始->运行->rdpclip.exe,重新运行此程序 ...

  2. 0002SpringBoot整合Junit

    前提条件:SpringBoot已经整合了Mybatis,至于SpringBoot如何整合Mybatis可参考我的上一篇文章 SpringBoot为什么要整合Juni? SpringBoot整合了Jun ...

  3. React中setState的怪异行为 ——setState没有即时生效

    setState可以说是React中使用频率最高的一个函数了,我们都知道,React是通过管理状态来实现对组件的管理的,当this.setState()被调用的时候,React会重新调用render方 ...

  4. Java核心技术 卷一 复习笔记(丁

    面向对象1.面向对象设计概述 1.1.面向对象是什么 面向对象是一种程序设计范型(简称OOP),是针对对象进行开发,简化开发过程的一种设计方式 1.2.类 类是构造对象的模板,相当于一个烘焙模板,而对 ...

  5. idea jsp文件中body标签内引入编辑器后提示statement expected

    解决方案: 1.用标签将script包一层解决问题 2.或者在</script>后添加自闭和标签(推荐) <input/>.<img/> //等等自闭和标签

  6. 「NOI2015」荷马史诗 (k叉huffman树/k叉合并果子)

    是个多叉huffman树,思想类比合并果子. 具体见 CrazyDave 的博客 CODE #include <bits/stdc++.h> using namespace std; ty ...

  7. mousemove([[data],fn])

    mousemove([[data],fn]) 概述 当鼠标指针在指定的元素中移动时,就会发生 mousemove 事件.大理石构件来图加工 mousemove事件处理函数会被传递一个变量——事件对象, ...

  8. Oracle 物理结构(三) 文件-参数文件

    一.参数文件介绍 Oracle中的参数文件是一个包含一系列参数以及参数对应值的操作系统文件.它们是在数据库实例启动时候加载的, 决定了数据库的物理 结构.内存.数据库的限制及系统大量的默认值.数据库的 ...

  9. 牛客小白月赛11 Rinne Loves Xor

    题目链接:https://ac.nowcoder.com/acm/contest/370/I code: #include<bits/stdc++.h> using namespace s ...

  10. 2018-2019 ACM-ICPC, China Multi-Provincial Collegiate Programming Contest

    目录 Contest Info Solutions A. Maximum Element In A Stack B. Rolling The Polygon C. Caesar Cipherq D. ...