学习来自《极客学院》

 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. 在腾讯开发应用中心上架apk所遇到的问题

    这篇只是为了记录我走过的弯路,和判断错误的方法 首先当我用 keyStore打包apk的时候,程序没有报任何错误,当然也可以运行: 接下来就是上传该apk吧: 等上传完了,就报解析错误.如下.: aa ...

  2. iOS-给UIView添加点击事件

    一.当遇到一些UIView 或者 UIView的子类时,比如点击UIImageView要放大图片等. 二.步骤: 1.首先要确保打开控件的用户交互,userInteractionEnabled设置成Y ...

  3. 浅析I/O模型及其设计模式

    前言 I/O在软件开发中的重要性无需多言,无论是在操作系统.网络协议.DBMS这种底层支撑软件还是在移动APP,大型网站服务器等应用软件的开发中都是最核心最重要的部分.特别是现在软件服务使用量和数据量 ...

  4. fis3使用环境

    1.全局安装nodejs 2.安装http-server npm install http-server -g 3.安装fis3 npm install -g fis3 如要限制版本号写法是:npm ...

  5. css优先级和层叠

    css优先级和层叠 1.优先级    计算方法:        a.行内样式        b.id选择器的数量        c.类,伪类和属性选择器的数量        d.标签选择器和伪元素选择 ...

  6. java俄罗斯方块游戏代码

    java俄罗斯方块游戏代码: package com; import java.awt.Color; import java.awt.Graphics; import java.awt.event.K ...

  7. VS2010 根据模型生成数据库 打开edmx.sql文件时 vs出现无响应的解决方案

    今天在VS2010 sp1+sql server 2008 R2+Win7操作系统下测试ADO.NET 实体数据模型时 ,遇到这样一个问题. 首先建好实体模型,然后"根据模型生成数据库&qu ...

  8. LeetCode127:Word Ladder II

    题目: Given two words (start and end), and a dictionary, find all shortest transformation sequence(s) ...

  9. POSTMAN and HTTPie to test APIs

    http://blog.mashape.com/postman-httpie-test-apis/ We love working with APIs at Mashape, and we love ...

  10. php学习笔记:利用递归实现删除文件目录

    直接删除目录,如果是空目录是可以删除,如果不是空目录,这时候只能先删除目录里面的文件,然后再删除目录.我封装了个删除函数,然后直接调用这个函数.喜欢的可以直接拿去用,编码是gbk的,使用时候注意下编码 ...