Swift面向对象基础(上)——Swift中的类和结构体(上)
学习来自《极客学院》
import Foundation //1.定义类和结构体
/*
[修饰符]calss 类名{
零到多个构造器
零到多个属性
零到多个方法
零到多个下标
}
修饰符可以是:private public internal final
*/ /*定义结构体
[修饰符]struct 结构体名{ }
修饰符可以是:private public internal
*/ /*
定义属性的语法
[修饰符] var或者let 存储属性名:类型名 = 初始值 <就是一般的变量声明和定义的方式>
*/ //类的创建以及实例的创建我懂,所以下面直接创建结构体,以及结构体的实例
struct dog{
var name:String
var age:Int
func run(){
println("\(age)岁的\(name)跑步中...")
}
}
var littledog:dog = dog(name: "小狗", age: )
littledog.run() //重点(结构体和类的区别):结构体是值类型,类是引用类型 //内存里的对象可以有多个引用,即多个引用变量指向同一个对象,这个不用多说,下面就直接证明结构体是值类型
var bigdog = littledog
bigdog.name = "大狗"
bigdog.age =
bigdog.run()
运行结果:

Swift的一个代码(有关swift懒加载、使用了KVC定义模型):
//
// Class.swift
// Swift的一个类
//
// Created by HEYANG on 16/3/19.
// Copyright © 2016年 HEYANG. All rights reserved.
//
// http://www.cnblogs.com/goodboy-heyang
// https://github.com/HeYang123456789
// import Foundation class OneClass : NSObject{ //=======属性+懒加载=======
//如何自定义一个对象,而对象的属性如果又是基本数据类型,不建议设置为可选类型
//而应该赋值为0,或者-1
var value:Int =
var string:String?
var 闭包: (()->())? //声明一个闭包
/*
懒加载的格式:
lazy var 变量名称:数据类型 = 闭包()
注意:闭包后面的()必须写,代表着执行闭包,将闭包的返回值赋值给变量
*/
lazy var listData:[String]? = {
() -> [String]
in
print("Hello world!")
return ["hello","world"]
}()
// 如果在懒加载中,属性指明了类型,那么闭包中的前面两行就可以省略
lazy var listData2:[String]? = {
print("Hello world!")
return ["hello","world"]
}()
// 如果实际开发中,懒加载的属性比较多,可以这么处理
lazy var listData3:[String]? = self.test()
// 由此可见,闭包就是一个特殊的函数
func test() -> [String]{
print("Hello world!")
return ["hello","world"]
}// 这函数部分可以统一放在别处 // 开发中推荐的写法
lazy var listData4 = {
() -> [String]
in
print("Hello,world!")
return ["Hello","World"]
}() //=======构造方法=======
override init() {
value =
string = "开心"
} //=======自定义构造方法,并使用KVC=======
init(value:Int,string:String) {
// 初始化属性
self.value = value
self.string = string
} init(dict: [String:AnyObject])
{
// 实现字典转模型,必须先手动调用调用父类init方法
super.init()
setValuesForKeysWithDictionary(dict)
} // 如果利用KVC赋值,但是字典和模型的属性不能一一对应,就调用下面的方法
override func setValue(value: AnyObject?,forUndefinedKey key:String){
print("下面是[]的部分就是模型中找不到的属性:")
print("[key:\(key),value:\(value)]")
}
//=======重写description属性=======
override var description: String{
// 优化
let property = ["value","string"]//属性名
let dictKeyValue = dictionaryWithValuesForKeys(property)
return "\(dictKeyValue)" // return "Hello"
}
// 这个description就是属性,不过重写了简化的get方法,就是只读属性 // // 在Swift中只读属性称之为:计算型属性,它不具备存储性能
// // 下面是只读属性的一般写法
// var name:String
// {
// willSet{
// print(name)
// print(newValue)
// }
// didSet{
// print(name)
// print(oldValue)
// }
// }
// var name2:String
// {
// get{
// return "只读属性"
// }
// }// 然后简写成
// var name3:String
// {
//
// return "只读属性"
//
// } //=======析构方法=======
deinit{ }
} //=======知识补充======= /*
声明闭包的时候
错误的写法:var 闭包: ()->()?
正确的写法:var 闭包: (()->())?
因为在"错误的写法:var 闭包: ()->()?"中,代表的是闭包的返回值是可选的,而不是闭包是可选的 */
源码下载:链接: http://pan.baidu.com/s/1skuEwWl 密码: 3psc
Swift面向对象基础(上)——Swift中的类和结构体(上)的更多相关文章
- Swift学习笔记(10):类和结构体
目录: 基本 属性 方法 下标 继承 基本 使用class和struct关键字定义类和结构体. ・类是引用类型,结构体和枚举是值类型 ・值类型被赋予给一个变量.常量或被传递给一个函数时,已值拷贝方式传 ...
- C#基础知识系列三(类和结构体、String和StringBuilder、equals和==)
前言 这一节主要来了解一下类和结构体之间的异同点.以及针对String和StringBuilder的用法.equals和==,其实可以看出很多地方都用到了上一节的值类型和引用类型.堆栈和装箱拆箱操作吧 ...
- Swift面向对象基础(上)——Swift中的类和结构体(下)
学习来自<极客学院> import Foundation class User { var name:String var age:Int init(name:String,age:Int ...
- Swift中的类和结构体的相同点与不同点
相同点: 1.都是有内部变量和函数 2.都可以有内部下标方式去取属性 3.都可以有初始化函数 4.都可以用协议 不同点: 1.类有继承 2.类可以多重引用 3.类有析构
- 站在OC的基础上快速理解Swift的类与结构体
阅读此文章前,您已经有一定的Object-C语法基础了!) 2014年,Apple推出了Swift,最近开始应用到实际的项目中. 首先我发现在编写Swift代码的时候,经常会遇到Xcode不能提示,卡 ...
- Swift语法学习之 类和结构体
类和结构体 本页包括内容: 类和结构体对照 结构体和枚举是值类型 类是引用类型 类和结构体的选择 集合(collection)类型的赋值与复制行为 与其他编程语言所不同的是,Swift 并不要求你为自 ...
- 【Swift学习】Swift编程之旅---类和结构体(十三)
与其他编程语言所不同的是,Swift 并不要求你为自定义类和结构去创建独立的接口和实现文件.你所要做的是在一个单一文件中定义一个类或者结构体,系统将会自动生成面向其它代码的外部接口. 注意:通常一个类 ...
- Swift类和结构体定义-备
Swift中的类和结构体定义的语法是非常相似的.类使用class关键词定义类,使用struct关键词定义结构体,它们的语法格式如下: class 类名 { 定义类的成员 } struct 结构体名 { ...
- 《从零开始学Swift》学习笔记(Day 25)——类和结构体定义
原创文章,欢迎转载.转载请注明:关东升的博客 Swift中的类和结构体定义的语法是非常相似的.类使用class关键词定义类,使用struct关键词定义结构体,它们的语法格式如下: class 类名 { ...
随机推荐
- [OpenCV] Feature Matching
得到了杂乱无章的特征点后,要筛选出好的特征点,也就是good matches. BruteForceMatcher FlannBasedMatcher 两者的区别:http://yangshen998 ...
- 如何在java中使用sikuli进行自动化测试
很早之前写过一篇介绍sikuli的文章.本文简单介绍如何在java中使用sikuli进自动化测试. 图形脚本语言sikuli sikuli IDE可以完成常见的单击.右击.移动到.拖动等鼠标操作,ja ...
- ASP.NET MVC分页实现
ASP.NET MVC中不能使用分页控件,所以我就自己写了一个分页局部视图,配合PageInfo类,即可实现在任何页面任意位置呈现分页,由于采用的是基于POST分页方式,所以唯一的限制就是必须放在FO ...
- Python3操作MySQL,查询数据并保存到文件中
我们在测试过程中,可能需要到数据库中拉去一些数据,为从测试准备.比如最近在做接口性能测试的时候,就需要很多数据来支撑,所以就需要的数据库去查询数据,下面就是python3 查询 mysql 并且保存到 ...
- JavaScrip
一.JavaScript简介 1.JavaScript是个什么东西? 它是个脚本语言,需要有宿主文件,它的宿主文件是HTML文件. 2.它与Java什么关系? 没有什么直接的联系,Java是Sun公司 ...
- Mysql主从备份和SQL语句的备份
MySQL服务器的主从配置,本来是一件很简单的事情,无奈不是从零开始,总是在别人已经安装好的mysql服务器之上 ,这就会牵扯到,mysql的版本,启动文件,等一些问题. http://www.cnb ...
- SQL Server 性能调优(一)——从等待状态判断系统资源瓶颈【转】
转载自:http://blog.csdn.net/dba_huangzj/article/details/7607844#comments 通过DMV查看当时SQL SERVER所有任务的状态(sle ...
- 译 PrestaShop开发者指南 第二篇 代码规范
原文:<http://doc.prestashop.com/display/PS15/Coding+Standards> 废话不多译了,讲重点. 代码风格验证工具:CodeSniffer( ...
- phpcms v9 升级视频云问题推荐位不能添加
因为使用的是v9的早期版本,后来升级的时候没敢升级数据库,直接使用了老的数据库结构,造成[推荐位]添加不能使用,报告没有thumb列. 查看数据库果然没有,没办法要么添加相关的列,要么禁用上传缩略图. ...
- winform 属性
WinForm为客户端程序必须在.NET Framework框架上运行 一.常用属性: 布局: AutoScroll:当控件内容超出可见区域是否显示滚动条: Autosize:当控件内容有超出时是否自 ...