学习来自《极客学院》

 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中的类和结构体(上)的更多相关文章

  1. Swift学习笔记(10):类和结构体

    目录: 基本 属性 方法 下标 继承 基本 使用class和struct关键字定义类和结构体. ・类是引用类型,结构体和枚举是值类型 ・值类型被赋予给一个变量.常量或被传递给一个函数时,已值拷贝方式传 ...

  2. C#基础知识系列三(类和结构体、String和StringBuilder、equals和==)

    前言 这一节主要来了解一下类和结构体之间的异同点.以及针对String和StringBuilder的用法.equals和==,其实可以看出很多地方都用到了上一节的值类型和引用类型.堆栈和装箱拆箱操作吧 ...

  3. Swift面向对象基础(上)——Swift中的类和结构体(下)

    学习来自<极客学院> import Foundation class User { var name:String var age:Int init(name:String,age:Int ...

  4. Swift中的类和结构体的相同点与不同点

     相同点: 1.都是有内部变量和函数 2.都可以有内部下标方式去取属性 3.都可以有初始化函数 4.都可以用协议   不同点: 1.类有继承 2.类可以多重引用 3.类有析构  

  5. 站在OC的基础上快速理解Swift的类与结构体

    阅读此文章前,您已经有一定的Object-C语法基础了!) 2014年,Apple推出了Swift,最近开始应用到实际的项目中. 首先我发现在编写Swift代码的时候,经常会遇到Xcode不能提示,卡 ...

  6. Swift语法学习之 类和结构体

    类和结构体 本页包括内容: 类和结构体对照 结构体和枚举是值类型 类是引用类型 类和结构体的选择 集合(collection)类型的赋值与复制行为 与其他编程语言所不同的是,Swift 并不要求你为自 ...

  7. 【Swift学习】Swift编程之旅---类和结构体(十三)

    与其他编程语言所不同的是,Swift 并不要求你为自定义类和结构去创建独立的接口和实现文件.你所要做的是在一个单一文件中定义一个类或者结构体,系统将会自动生成面向其它代码的外部接口. 注意:通常一个类 ...

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

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

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

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

随机推荐

  1. bootstrap插件学习-bootstrap.popover.js

    先看bootstrap.popover.js的结构 var Popover = function ( element, options ){} //构造器 Popover.prototype = {} ...

  2. Android 学习笔记之Volley开源框架解析(三)

      学习内容: 1.CacheDispatcher缓存请求调度... 2.Cache缓存数据的保存... 3.DiskBasedCache基于磁盘的缓存类实现方式...   前面说到使用Volley发 ...

  3. Scrum团队

    5.Scrum团队成立 5.1 团队名称,团队目标.团队口号.团队照: 团队名称:@four! 团队目标:做出像“数学口袋精灵”那么棒的软件 团队口号:多劳多得 团队照: 5.2 角色分配 产品负责人 ...

  4. Spring MVC 配置文件dispatcher-servlet.xml 文件详解

    <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...

  5. AnyChatCoreSDK.h

    #ifndef ANYCHATCORESDK_H #define ANYCHATCORESDK_H #include <windows.h> #include <stdlib.h&g ...

  6. iOS7 UI兼容 导航栏按钮边框 UINavigationItem left and right padding

    iOS7之前的UI为: 而在iOS7中,由于设计方面的原因,使得UI变为: 修改的方法重写UINavigationItem的setLeftBarButtonItem和setRightBarButton ...

  7. ACCESS的参数化查询

    看论坛上还许多人问及ACCESS被注入的安全问题许多人解决的方法仍然是用Replace替换特殊字符,然而这样做也并没有起到太大做用今天我就把我用ACCESS参数化查询的一些方法和经验和大家分享希望对大 ...

  8. IDEA默认常用快捷键

    作为Java的利器,IDEA属实是非常好用,参考网文总结其常用快捷键如下: Ctrl + /(Ctrl + Shift + /):注释或反注释指定的语句.这个是本人最喜欢的,所以排在第一位. Ctrl ...

  9. [PHP] 命令行执行整合pathinfo模拟定时任务

    命令行模式下,根据传参,调用不同控制器.控制器中根据配置定时执行指定方法 Application.php <?php class Application{ public static funct ...

  10. 四、MyBatis主配置文件

    //备注:该博客引自:http://limingnihao.iteye.com/blog/1060764 在定义sqlSessionFactory时需要指定MyBatis主配置文件: Xml代码 收藏 ...