作者:fengsh998
原文地址:http://blog.csdn.net/fengsh998/article/details/29606137
转载请注明出处
假设认为文章对你有所帮助,请通过留言或关注微信公众帐号fengsh998来支持我,谢谢!

swift扩展了非常多功能和属性,有些也比較奇P。仅仅有慢慢学习,通过经验慢慢总结了。

以下将初步学习一下类的写法。

码工,最大爱好就是看码,而不是文字,太枯燥。

//
// computer.swift
// swiftDemo
//
// Created by apple on 14-6-8.
// Copyright (c) 2014年 fengsh. All rights reserved.
/*
写本样例的目的在于高速学习swift类的写法,包含知识点:
1.属性设置
2.构造、释构
3.接口实现多态
4.函数的重载(重载非常特别不须要overload关键词Delphi的朋友注意了)和重写(override)
5.类函数(静态成员函数)
6.各种函数的声明,带參,默认值,多个返回,多个输出參数,多个未确定參数的函数,内连函数等
7.函数类型变量,函数地址作为传參,返回函数地址(还未完工,学习中)
8.单例
9.swift新功能willset,didset @lazy 属性
10.(兴许学习补充) */ import Foundation var instance : Computer?
let unk = "unKnow" //显示器屏幕宽高
struct MonitorWH {
var width = 0
var height = 0
var resolution = 0.0 //分辩率
} //协义,接口,实现多重继承
protocol ProtocolComputer {
var price : Double {get} //仅仅有get方法 func runComputer()
} //计算机类型
enum ComputerType :Int
{
case none
case book //笔记本
case superBook //超级笔记本
case home //家庭电脑
} func callbackWhenStarting()//computer:Computer
{ } //计算机类
class Computer : NSObject,ProtocolComputer
{
var cpu = unk //cpu
var memory = unk //内存
var hardDisk = unk //硬盘
var monitor = unk //显示器
var cpName = unk //品牌
var computertype : ComputerType = .none //@lazy //这关键词声明的有啥作用啊???? //继承接口的属性
var price :Double = 0.0 //willset didset属性
var totalPrice: Int = 0 {
willSet(newTotalPrice) { //參数使用new+变量名且变量名首地址大写
println("准备将totalPrice值(原值为:\(totalPrice))设为: \(newTotalPrice)")
//to do somthing before set.
}
didSet {
if totalPrice > oldValue {
println("设置后新值比旧值添加�了\(totalPrice - oldValue)")
}
}
} //声明一个set,get属性
var computerPrice: Double {
get {
println("you call computerPrice.")
return price
}
set {
price = newValue
println("you set computerPrice value is \(price)")
}
} //默认构造
init()
{
println("default creatrustor is called.")
} //默认构造 不能和init()共存
// convenience init() {
// self.init(computerName: "unknow" ,price:0)
// } //自己定义构造函数
init(computerName:String,price:Double)
{
println("custom creatrustor is called.")
self.cpName = computerName
self.price = price
} //释构
deinit {
println("this is destory?")
} func description() -> String
{
//还真不知道怎么换行来写代码曾经能够使用\如今被作參用了
return "Computer description : product \(self.cpName) ,type is \(self.computertype.toRaw()) , cpu is \(self.cpu) ,memory is \(self.memory),disk is \(self.hardDisk) ,monitor is \(self.monitor) ,price is \(self.price)"
} //类函数 (OC 中的+号操作, c/c++ 中的static 函数)
class func shareInstance() -> Computer
{
return Computer()
} //开机关机 (不带返回值函数)
func operationComputer(onOrOff : Bool)
{
if onOrOff
{
println("computer is starting")
}
else
{
println("computer is stopping")
}
} //无參,无返回值函数
func computerRunning()
{
println("computer is running")
} //多个返回值(即输出參数)
func getComputerConfig()->(cpu:String,hd:String,mem:String,mon:String)
{
return (self.cpu,self.hardDisk,self.memory,self.monitor)
} //使用inout參数来作为输出參数
func getComputerConfig(inout cpu:String,inout hd:String,inout mem:String,inout mon:String)
{
cpu = self.cpu
hd = self.hardDisk
mem = self.memory
mon = self.monitor
} //外部參数名函数(目的是让调用者更加清楚每一个參数的详细函义)
//computerCPU,withComputerhardDisk,withComputerMemory,withComputerMonitor 这些都是外部參数名
//在调用时必须带上
func setComputerConfig(computerCPU cpu:String,withComputerhardDisk hd:String,
withComputerMemory mem:String,withComputerMonitor mon:String)
{
self.cpu = cpu
self.hardDisk = hd
self.memory = mem
self.monitor = mon
} //使用#来把变量名提升了具有外部參数名作用的变量名,这样就不用再写一次外部參数名(在外部參数名与变量名同样时使用)
func setComputerConfig(#cpu:String,disk:String,mem:String,mon:String)
{
self.cpu = cpu
self.hardDisk = disk
self.memory = mem
self.monitor = mon
} //參数的默认值
func macBookPro(pname:String = "Apple",cpu:String = "Intel Core I5",type:ComputerType,
mem:String = "2G",disk:String ,mon:String = "Intel HD Graphics 4000")
{
self.cpu = cpu
self.hardDisk = disk
self.memory = mem
self.monitor = mon
self.cpName = pname
self.computertype = type
} //可变參数
func usbNumbers(usbs:String...) -> String
{
var ret : String = ""
for usb in usbs
{
println(usb)
ret += (usb + ",")
}
return ret
} //常量參数、变量參数
//虽然函数内部改动了version 但并不影响原来外部设定的值
func lookWindowsVersion(var version:String) ->String
{
version = "default windows " + version
return version
} //mutating func func getResolution(pname:String) -> MonitorWH
{
var mt = MonitorWH(width: 1364,height: 1280,resolution: 16/9)
if pname == "Phripse"
{
mt = MonitorWH(width: 5555,height: 3333,resolution: 29/10)
} return mt
} //函数作为參数传參 //var callbackWhenStarting : ()->() = callbackWhenStarting
//函数作为返回值
//函数作为变量定义
//嵌套函数
func openTask()
{
func openOtherTask()
{
println("open other task")
}
println("open task")
} //函数重写
func lookComputerBasicHardInfo(computer:Computer)
{ } //接口实现
func runComputer()
{
println("Computer run.")
}
} class Lenove : Computer
{
override func lookComputerBasicHardInfo(computer:Computer)
{
if computer is Lenove //is as 操作。
{
println("这是联想")
}
}
}

调用DEMO:

 //var cpt = Computer()   //调用默认构造
var cpt = Computer(computerName: "Apple",price:12000) //调用自己定义构造
println(cpt.description)
println(cpt.getComputerConfig()) //属性測试
println("价钱为:\(cpt.computerPrice)")
cpt.computerPrice = 2000.0;
println("设置后的价钱为:\(cpt.computerPrice)") //測试willset didset
cpt.totalPrice = 100;
cpt.totalPrice = 400;
cpt.totalPrice = 900; var a = "",b = "",c = "",d = ""
cpt.getComputerConfig(&a,hd: &b,mem: &c,mon: &d)
println("a=\(a),b=\(b),c=\(c),d=\(d)") cpt.setComputerConfig(computerCPU :"inter i5", withComputerhardDisk:"WD 500",
withComputerMemory:"4G",withComputerMonitor:"Phripse") println("最新配置:\(cpt.description)") cpt.setComputerConfig(cpu: "AMD", disk: "HD 1T", mem: "8G", mon: "SamSung")
println("最新配置:\(cpt.description)") //使用缺省值调用函数
cpt.macBookPro(type: ComputerType.book,disk: "5")
println("平果配置:\(cpt.description)") let usbSupportType = cpt.usbNumbers("2.0","3.0")
println("支持USB接口:\(usbSupportType))") let extentUsbType = cpt.usbNumbers("5.0")
println("扩展USB接口:\(extentUsbType)") var version = "xp 3";
let newversion = cpt.lookWindowsVersion(version);
println(version)
println(newversion)

输出:

custom creatrustor is called.
Computer description : product Apple ,type is 0 , cpu is unKnow ,memory is unKnow,disk is unKnow ,monitor is unKnow ,price is 12000.0
(unKnow, unKnow, unKnow, unKnow)
you call computerPrice.
价钱为:12000.0
you set computerPrice value is 2000.0
you call computerPrice.
设置后的价钱为:2000.0
准备将totalPrice值(原值为:0)设为: 100
设置后新值比旧值添加�了100
准备将totalPrice值(原值为:100)设为: 400
设置后新值比旧值添加�了300
准备将totalPrice值(原值为:400)设为: 900
设置后新值比旧值添加�了500
a=unKnow,b=unKnow,c=unKnow,d=unKnow
最新配置:Computer description : product Apple ,type is 0 , cpu is inter i5 ,memory is 4G,disk is WD 500 ,monitor is Phripse ,price is 2000.0
最新配置:Computer description : product Apple ,type is 0 , cpu is AMD ,memory is 8G,disk is HD 1T ,monitor is SamSung ,price is 2000.0
平果配置:Computer description : product Apple ,type is 1 , cpu is Intel Core I5 ,memory is 2G,disk is 5 ,monitor is Intel HD Graphics 4000 ,price is 2000.0
2.0
3.0
支持USB接口:2.0,3.0,)
5.0
扩展USB接口:5.0,
xp 3
default windows xp 3
this is destory?

样子最好自己写一个从过种中去学习。光看,或许还不清楚是什么。

谢谢大家,由于是英文文档,看得我头也比較痛,有些要猜和执行来理解,还有些没有完好有点乱。有些没有搞懂所以就没有整理好。

大家共同学习,共同进步。

初探swift语言的学习笔记四(类对象,函数)的更多相关文章

  1. 初探swift语言的学习笔记四-2(对上一节有些遗留进行处理)

    作者:fengsh998 原文地址:http://blog.csdn.net/fengsh998/article/details/30314359 转载请注明出处 假设认为文章对你有所帮助,请通过留言 ...

  2. 初探swift语言的学习笔记(闭包 - 匿名函数或block块代码)

    很多高级语言都支持匿名函数操作,在OC中的block也为大家所熟悉,然面在swift里好像是被重新作了一个定义,不叫匿名函数,或 block了,而叫闭包(closure).下面配合代码来理解一下swi ...

  3. 初探swift语言的学习笔记(闭包-匿名函数或block块代码)

    使用Block的地方很多,其中传值只是其中的一小部分,下面介绍Block在两个界面之间的传值: 先说一下思想: 首先,创建两个视图控制器,在第一个视图控制器中创建一个UILabel和一个UIButto ...

  4. 初探swift语言的学习笔记七(swift 的关健词)

    每一种语言都有相应的关键词,每个关键词都有他独特的作用,来看看swfit中的关键词: 关键词: 用来声明的: “ class, deinit, enum, extension, func, impor ...

  5. 初探swift语言的学习笔记十一(performSelector)

    作者:fengsh998 原文地址:http://blog.csdn.net/fengsh998/article/details/35842441 转载请注明出处 假设认为文章对你有所帮助,请通过留言 ...

  6. 初探swift语言的学习笔记三(闭包-匿名函数)

    作者:fengsh998 原文地址:http://blog.csdn.net/fengsh998/article/details/29353019 转载请注明出处 假设认为文章对你有所帮助,请通过留言 ...

  7. 初探swift语言的学习笔记十(block)

    作者:fengsh998 原文地址:http://blog.csdn.net/fengsh998/article/details/35783341 转载请注明出处 假设觉得文章对你有所帮助,请通过留言 ...

  8. 初探swift语言的学习笔记五(线程)

    作者:fengsh998 原文地址:http://blog.csdn.net/fengsh998/article/details/30354127 转载请注明出处 假设认为文章对你有所帮助,请通过留言 ...

  9. 初探swift语言的学习—Object-C与Swift混编

    swift 语言出来后,可能新的项目直接使用swift来开发,但可能在过程中会遇到一些情况,某些已用OC写好的类或封装好的模块,不想再在swift 中再写一次,哪就使用混编.这个在IOS8中是允许的. ...

随机推荐

  1. 二、T4模板

    上文带大家见识了下T4,这里呢开始介绍T4模板有关的内容.关于T4模板介绍和使用网上一搜一箩筐,想深入研究的可以自行去找些资料,这里只介绍接下来我们需要使用的一些知识,不会面面俱到的讲T4模板所有的知 ...

  2. Hive学习之七《 Sqoop import 从关系数据库抽取到HDFS》

    一.什么是sqoop Sqoop是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql.postgresql...)间进行数据的传递,可以将一个关系型数据库(例如 :MySQL ...

  3. connect network is unreachable 解决办法

    详细教程见:http://blog.csdn.net/liukun321/article/details/6662950 1.虚拟机中的centos系统要连接外网,我们需要使用桥接网络 2.正常配置e ...

  4. Java学习----对象的构造

    public class Teacher { private String teacherName; private String gendar; // 构造方法:初始化属性值,没有返回类型 publ ...

  5. 21 Merge Two Sorted Lists(两链表归并排序Easy)

    题目意思:对两个递增链表进行归并排序 思路:没什么好说的,二路归并 /** * Definition for singly-linked list. * struct ListNode { * int ...

  6. angularjs现学现记之—$apply()和$digest()

    angularjs的双向数据绑定是个重要的特性,它让我们的代码简洁了许多,然而它又是如何知道数据发生了变化并改变页面的呢.最近看了一篇介绍觉得十分有用 首先,在angularjs中是有$watch事件 ...

  7. Xcode升级导致插件失效的解决办法-b

    作为iOS界的攻城师,每一次水果发布新的Xcode开发版本时,我们都会跟进,然而那些好用的Xcode插件都会莫名的失灵...对此我各种百度,在这里,我将跟大家分享我是如何解决这些问题的.当然,我的方案 ...

  8. The executable was signed with invalid entitlements.

    如图,出现这个的原因是   配置文件(provisioning  profile)和  app 授权文件中的   entitlements(授权)  不匹配 具体应该从  配置文件  和证书的对应 问 ...

  9. Java 保留两位小数

    在实际项目开发中,经常会存在浮点数四舍五入保留几位小数的问题,故收集了几种常用方法: 直接上代码(保留两位小数). Format.java: import java.math.BigDecimal; ...

  10. 台积电16nm工艺为什么好过三星14nm

    最近,关于iPhone6s A9处理器版本的事情的话题很热,最后都闹到苹果不得不出来解释的地步,先不评判苹果一再强调的整机综合续航差2~3%的准确性,但是三星14nm工艺相比台积电16nm工艺较差已经 ...