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 类名 { ...
随机推荐
- linux分享六:nohup与&,守护进程
contab每秒执行脚本,然后将把标准错误重定向到标准输出(2>&1)以追加的方式写入log_cronjob.txt.补充:试想2>1代表什么,2与>结合代表错误重定向,而1 ...
- 笔试测试开发题三道(python)
笔试遇到的三道测试开发题,虽然都不难,但关键还是思路吧!我想在开发东西的时候应该具备的就是思路,有了思路尝试去写,或查相关文档或代码,在此基础上需要不断调整最终达到需求.思路又是在不断练习中获得的. ...
- 专门为码农定制的14款创意的T裇(T-Shirt)设计
T裇衫是人们在各种场合都可穿着的服装,如在T裇衫上作适当的装饰,即可增添无穷的韵味.通过图案直接反映人类的精神风貌,你可以把日常生活中的兴趣.习惯.喜怒哀乐.嗜好等展露无疑,张扬个性.秀出自我.对于码 ...
- 流行趋势:25款很酷的长阴影效果 LOGO 设计
长阴影其实就是扩展了对象的投影,感觉是一种光线照射下的影子,通常采用角度为 45 度的投影,给对象添加了一份立体感.长阴影(Long Shadow)概念来自于最新非常流行的扁平化设计(Flat Des ...
- Repository模式中,Update总是失败及其解析
在Repository模式中,我的Update方法总是无法更新实体,这个非常郁闷,Update方法如下: 1: public virtual void Update(T entity) 2: { 3: ...
- MyBatis魔法堂:各数据库的批量Update操作
一.前言 MyBatis的update元素的用法与insert元素基本相同,因此本篇不打算重复了.本篇仅记录批量update操作的sql语句,懂得SQL语句,那么MyBatis部分的操作就简单了. ...
- EncryptionHelper
public static class EncryptionHelper { #region const /// <summary> /// 默认使用的适合于DES,RC2算法的Key / ...
- 对一个或多个实体的验证失败。有关详细信息,请参见“EntityValidationErrors”属性。
问题原因: 1.非空列未插入值错误 2.内容长度超过列最大长度(超过数据库设置长度,或者自定义长度“[StringLength(50, MinimumLength = 6, ErrorMessage ...
- 【循序渐进学Python】6.Python中的函数
1. 创建函数 一个函数代表一个行为并且返回一个结果(包括None),在Python中使用def关键字来定义一个函数,如下: def hello(name): print 'hello,' + nam ...
- 重新想象 Windows 8 Store Apps (59) - 锁屏
[源码下载] 重新想象 Windows 8 Store Apps (59) - 锁屏 作者:webabcd 介绍重新想象 Windows 8 Store Apps 之 锁屏 登录锁屏,获取当前程序的锁 ...