class AoTeMan{
var name:String
init(name:String){
self.name = name
}
func action(otherName:String){
print("\(name)打\(otherName)")
}
}
class Monster {
var name:String
init(otherName:String){
self.name = otherName
}
}
let s1 = AoTeMan(name: "奧特曼")
let s2 = Monster(otherName: "小怪獸")
s1.action(s2.name)
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo}p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #3d1d81}p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #bb2ca2}span.s1 {font-variant-ligatures: no-common-ligatures; color: #bb2ca2}span.s2 {font-variant-ligatures: no-common-ligatures}span.s3 {font-variant-ligatures: no-common-ligatures; color: #703daa}span.s4 {font-variant-ligatures: no-common-ligatures; color: #000000}span.s5 {font-variant-ligatures: no-common-ligatures; color: #272ad8}span.s6 {font-variant-ligatures: no-common-ligatures; color: #4f8187}span.s7 {font-variant-ligatures: no-common-ligatures; color: #31595d}span.s8 {font-variant-ligatures: no-common-ligatures; color: #3d1d81}span.s9 {font-variant-ligatures: no-common-ligatures; color: #d12f1b}span.s10 {font: 18.0px 'Heiti SC Light'; font-variant-ligatures: no-common-ligatures; color: #d12f1b}
class PC {
func pcNumber() -> Int{
return Int(arc4random_uniform(100)) + 1
}
}
let b = PC()
let c = b.pcNumber()
var isP = true
while isP{
print("請(qǐng)輸入1到100的隨機(jī)數(shù):",terminator:"")
let a = inputInt()
if a == c{
print("恭喜你回答正確")
isP = false
}else if a > c{
print("你的數(shù)字大了")
}else {
print("你的數(shù)字小了")
}
}
在做以上兩個(gè)的時(shí)候還沒(méi)有發(fā)現(xiàn)什么問(wèn)題,畢竟是單一對(duì)象比較簡(jiǎn)單,但是在進(jìn)行下段代碼的時(shí)候就出現(xiàn)錯(cuò)誤了。
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo}p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #4f8187}span.s1 {font-variant-ligatures: no-common-ligatures; color: #bb2ca2}span.s2 {font-variant-ligatures: no-common-ligatures}span.s3 {font-variant-ligatures: no-common-ligatures; color: #272ad8}span.s4 {font-variant-ligatures: no-common-ligatures; color: #703daa}span.s5 {font-variant-ligatures: no-common-ligatures; color: #4f8187}span.s6 {font-variant-ligatures: no-common-ligatures; color: #3d1d81}span.s7 {font-variant-ligatures: no-common-ligatures; color: #d12f1b}span.s8 {font: 18.0px 'Heiti SC Light'; font-variant-ligatures: no-common-ligatures; color: #d12f1b}span.s9 {font-variant-ligatures: no-common-ligatures; color: #31595d}span.s10 {font-variant-ligatures: no-common-ligatures; color: #000000}
let a = 3.14
class minOvral {
var radius:Double
init(radius:Double){
self.radius = radius
}
func area() -> Double{
return a * radius * radius
}
func showRadius() -> Double{
return (radius + 3) * (radius + 3) * a
}
}
class MaxOvral {
func area(radius:Double) -> Double{
return (radius + 3) * (radius + 3) * a
}
func cf(radius:Double) -> Double{
return 2 * a * (radius + 3)
}
}
let minO = minOvral(radius: 3.0)
let maxO = MaxOvral()
print("圓環(huán)價(jià)格為:\((maxO.area(minO.radius) - minO.area()) * 3.5)")
print("周?chē)鷸艡趦r(jià)格:\(maxO.cf(minO.radius) * 1.5)")
對(duì)于兩個(gè)對(duì)象我就覺(jué)得比較有難度了,當(dāng)然現(xiàn)在解決了感覺(jué)比較簡(jiǎn)單,我沒(méi)有創(chuàng)建對(duì)象就直接用類(lèi)調(diào)用方法或者屬性,開(kāi)始以為創(chuàng)建對(duì)象只是賦值而已,如果設(shè)計(jì)到不賦值就不用創(chuàng)建對(duì)象,直接調(diào)用方法或者屬性,在繼續(xù)的觀看了一下老師的代碼發(fā)現(xiàn)對(duì)象也可以直接輸入到另外一個(gè)對(duì)象的方法中,這點(diǎn)很重要,在以后多個(gè)對(duì)象的時(shí)候應(yīng)該會(huì)占有很大的比重。記住一點(diǎn)對(duì)象調(diào)用方法和屬性。
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #008400}p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px 'Heiti SC Light'; color: #008400}p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; min-height: 16.0px}p.p4 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo}span.s1 {font-variant-ligatures: no-common-ligatures}span.s2 {font: 14.0px 'Heiti SC Light'; font-variant-ligatures: no-common-ligatures}span.s3 {font: 14.0px Menlo; font-variant-ligatures: no-common-ligatures}span.s4 {font-variant-ligatures: no-common-ligatures; color: #bb2ca2}span.s5 {font-variant-ligatures: no-common-ligatures; color: #000000}span.s6 {font: 14.0px Menlo; font-variant-ligatures: no-common-ligatures; color: #000000}span.s7 {font-variant-ligatures: no-common-ligatures; color: #703daa}span.s8 {font-variant-ligatures: no-common-ligatures; color: #4f8187}span.s9 {font-variant-ligatures: no-common-ligatures; color: #272ad8}
//0.發(fā)現(xiàn)類(lèi)
//-在對(duì)問(wèn)題的描述中找到名詞和動(dòng)詞
//-名詞會(huì)成為類(lèi)或類(lèi)中的屬性,動(dòng)詞會(huì)成為類(lèi)中的方法
//1.定義類(lèi)
//-數(shù)據(jù)抽象(屬性)
//-行為抽象(方法)
//-初始化方法
//訪問(wèn)修飾符
//-public
//-internal(內(nèi)部的)-默認(rèn)
//-private(私有)
class Circle {
// stored property
//-存儲(chǔ)屬性(保存和圓相關(guān)的數(shù)據(jù))
var radius:Double
init(radius:Double){
self.radius = radius
}
//通常獲得某個(gè)計(jì)算出的值的方法都可以設(shè)計(jì)成計(jì)算屬性
// computational property
//計(jì)算屬性(通過(guò)對(duì)存儲(chǔ)屬性做運(yùn)算得到的屬性)
var perimeter:Double{
//圓的周長(zhǎng)是一個(gè)只讀屬性
//所以此處只有g(shù)et{}沒(méi)有set{}
get {return 2 * M_PI * radius}
}
var area: Double{
get {return radius * radius * M_PI}
}
}
注意類(lèi)中的方法在沒(méi)有參數(shù)的情況下,另一種情況
var area:Double{
get{return。。。。}
}格式
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo}p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #008400}span.s1 {font-variant-ligatures: no-common-ligatures}span.s2 {font-variant-ligatures: no-common-ligatures; color: #bb2ca2}span.s3 {font-variant-ligatures: no-common-ligatures; color: #4f8187}span.s4 {font-variant-ligatures: no-common-ligatures; color: #703daa}span.s5 {font-variant-ligatures: no-common-ligatures; color: #3d1d81}span.s6 {font-variant-ligatures: no-common-ligatures; color: #272ad8}span.s7 {font-variant-ligatures: no-common-ligatures; color: #d12f1b}span.s8 {font-variant-ligatures: no-common-ligatures; color: #000000}span.s9 {font: 14.0px 'Heiti SC Light'; font-variant-ligatures: no-common-ligatures}span.s10 {font-variant-ligatures: no-common-ligatures; color: #008400}span.s11 {font: 14.0px 'Heiti SC Light'; font-variant-ligatures: no-common-ligatures; color: #008400}
init(){
answer = Int(arc4random_uniform(100)) + 1
counter = 0
hint = ""
}
//行為抽象
//判斷
不用非要在init()里面寫(xiě)參數(shù) 可以直接賦初值
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo}p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px 'Heiti SC Light'; color: #008400}p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #bb2ca2}span.s1 {font-variant-ligatures: no-common-ligatures; color: #bb2ca2}span.s2 {font-variant-ligatures: no-common-ligatures}span.s3 {font-variant-ligatures: no-common-ligatures; color: #703daa}span.s4 {font: 14.0px Menlo; font-variant-ligatures: no-common-ligatures; color: #000000}span.s5 {font: 14.0px Menlo; font-variant-ligatures: no-common-ligatures}span.s6 {font-variant-ligatures: no-common-ligatures; color: #4f8187}span.s7 {font-variant-ligatures: no-common-ligatures; color: #000000}span.s8 {font-variant-ligatures: no-common-ligatures; color: #272ad8}span.s9 {font-variant-ligatures: no-common-ligatures; color: #3d1d81}
import Foundation
class Point {
var x:Double
var y:Double
//被其它初始化方法所調(diào)用的初始化方法
//指派初始化方法/指派構(gòu)造器
init(x:Double,y:Double){
self.x = x
self.y = y
}
convenience init(){
self.init(x:0,y:0)
}
convenience init(point:(Double,Double)){
self.init(x:point.0,y:point.1)
}
func distanceTo(otherPoint:Point) -> Double{
let a = x - otherPoint.x
let b = y - otherPoint.y
return sqrt(a * a + b * b)
}
func moveTo(x:Double,y:Double){
self.x = x
self.y = y
}
}
這是今天其中第一個(gè)一個(gè)重要的知識(shí)點(diǎn),叫便利構(gòu)造器convenience
如上第一個(gè)convenience就是在打醬油的調(diào)用最開(kāi)始的init初始化方法,第二個(gè)convenience就是一個(gè)元組Point給x,y賦初值
有點(diǎn)生疏保留幾位小數(shù)代碼格式(如下代碼)
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo}span.s1 {font-variant-ligatures: no-common-ligatures; color: #3d1d81}span.s2 {font-variant-ligatures: no-common-ligatures}span.s3 {font-variant-ligatures: no-common-ligatures; color: #703daa}span.s4 {font-variant-ligatures: no-common-ligatures; color: #d12f1b}span.s5 {font-variant-ligatures: no-common-ligatures; color: #4f8187}
print(NSString(format: "%.2f", a.perimeter))
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo}p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; min-height: 16.0px}span.s1 {font-variant-ligatures: no-common-ligatures}span.s2 {font-variant-ligatures: no-common-ligatures; color: #bb2ca2}span.s3 {font-variant-ligatures: no-common-ligatures; color: #703daa}span.s4 {font-variant-ligatures: no-common-ligatures; color: #4f8187}span.s5 {font-variant-ligatures: no-common-ligatures; color: #272ad8}
var hp:Int{
get{
return _hp
}
set{
_hp = newValue > 0 ? newValue : 0
}
}
var mp:Int{
get{
return _mp
}
set{
_mp = newValue > 0 ? newValue : 0
}
}
init(name:String,hp:Int,mp:Int){
_name = name
_hp = hp
_mp = mp
}
第二個(gè)重用的知識(shí)點(diǎn),get set方法 前者只能讀取數(shù)據(jù),后者可以改寫(xiě),set用起來(lái)很方便,比如這里的血量和藍(lán)量不能低于0就用一個(gè)三元運(yùn)算來(lái)解決,漂亮優(yōu)雅,高內(nèi)聚,低耦合,
以下代碼是產(chǎn)生隨機(jī)變量的標(biāo)準(zhǔn)代碼模式
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo}p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; min-height: 16.0px}span.s1 {font-variant-ligatures: no-common-ligatures; color: #bb2ca2}span.s2 {font-variant-ligatures: no-common-ligatures}span.s3 {font-variant-ligatures: no-common-ligatures; color: #703daa}span.s4 {font-variant-ligatures: no-common-ligatures; color: #3d1d81}span.s5 {font-variant-ligatures: no-common-ligatures; color: #272ad8}
func randomInt(min:UInt32,max:UInt32) -> Int{
return Int(arc4random_uniform(max - min + 1) + min)
}
由UIView提供的類(lèi)Canvas直接調(diào)用就是,不用再新建類(lèi)了,這里就是建立對(duì)象c然后用c來(lái)發(fā)送消息
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo}p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #703daa}span.s1 {font-variant-ligatures: no-common-ligatures}span.s2 {font-variant-ligatures: no-common-ligatures; color: #bb2ca2}span.s3 {font-variant-ligatures: no-common-ligatures; color: #4f8187}span.s4 {font-variant-ligatures: no-common-ligatures; color: #703daa}span.s5 {font-variant-ligatures: no-common-ligatures; color: #000000}span.s6 {font-variant-ligatures: no-common-ligatures; color: #3d1d81}
let c = Canvas(frame:self.view.bounds)
c.backgroundColor = UIColor.clearColor()
self.view.addSubview(c)
第三個(gè)重要的知識(shí)點(diǎn)擴(kuò)展類(lèi)(extension),如果在某個(gè)特定的應(yīng)用中你發(fā)現(xiàn)現(xiàn)有的某個(gè)類(lèi)型少了某項(xiàng)功能,就可以通過(guò)這個(gè)方法來(lái)來(lái)添加這個(gè)功能。以下代碼主要是在Point類(lèi)中新建cgPoint這個(gè)方法來(lái)增加CGFloat單浮點(diǎn)這個(gè)功能。
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #bb2ca2}p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo}span.s1 {font-variant-ligatures: no-common-ligatures}span.s2 {font-variant-ligatures: no-common-ligatures; color: #000000}span.s3 {font-variant-ligatures: no-common-ligatures; color: #4f8187}span.s4 {font-variant-ligatures: no-common-ligatures; color: #bb2ca2}span.s5 {font-variant-ligatures: no-common-ligatures; color: #703daa}span.s6 {font-variant-ligatures: no-common-ligatures; color: #3d1d81}
extension Point{
var cgPoint:CGPoint{
get {return CGPointMake(CGFloat(x), CGFloat(y))}
}
}
這或許是swift一大亮點(diǎn)。用問(wèn)號(hào)實(shí)現(xiàn)兩個(gè)不確定的值得轉(zhuǎn)換,很精練,如果為空就是取默認(rèn)值(即藍(lán)色)如果不為空就去輸入的那個(gè)顏色
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo}span.s1 {font-variant-ligatures: no-common-ligatures}span.s2 {font-variant-ligatures: no-common-ligatures; color: #bb2ca2}span.s3 {font-variant-ligatures: no-common-ligatures; color: #703daa}
var color:UIColor?
(color ?? UIColor.blueColor()).set()
以下一大亮點(diǎn)就是弄了一個(gè)二維數(shù)組來(lái)實(shí)現(xiàn)三角形的不消失,即每產(chǎn)生一個(gè)一維數(shù)組pointArray然后用數(shù)組的append方法從最后的位置塞入newArray數(shù)組中,最后在用一個(gè)for循環(huán)來(lái)使二維數(shù)組中的每個(gè)值來(lái)實(shí)現(xiàn)draw()
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo}p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; min-height: 16.0px}p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #008400}span.s1 {font-variant-ligatures: no-common-ligatures; color: #bb2ca2}span.s2 {font-variant-ligatures: no-common-ligatures}span.s3 {font-variant-ligatures: no-common-ligatures; color: #703daa}span.s4 {font-variant-ligatures: no-common-ligatures; color: #4f8187}span.s5 {font-variant-ligatures: no-common-ligatures; color: #3d1d81}span.s6 {font-variant-ligatures: no-common-ligatures; color: #272ad8}span.s7 {font-variant-ligatures: no-common-ligatures; color: #31595d}span.s8 {font-variant-ligatures: no-common-ligatures; color: #008400}span.s9 {font: 14.0px 'Heiti SC Light'; font-variant-ligatures: no-common-ligatures; color: #008400}
class Canvas: UIView {
var pointArray:[Point] = []
var newArray:[Triangle] = []
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
if let touch = touches.first{
let touchPoint = touch.locationInView(self)
pointArray.append(touchPoint.myPoint)
if pointArray.count == 3{
let t = Triangle(va: pointArray[0], vb: pointArray[1], vc: pointArray[2])
// t.color = UIColor.redColor()
t.color = UIColor.randomColor()
newArray.append(t)
setNeedsDisplay()//刷新界面
pointArray.removeAll()
}
}
}
override func drawRect(rect: CGRect) {
for t in newArray{
t.draw()
}
}
}
求最大公約數(shù)
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo}p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; min-height: 16.0px}p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #bb2ca2}span.s1 {font-variant-ligatures: no-common-ligatures; color: #bb2ca2}span.s2 {font-variant-ligatures: no-common-ligatures}span.s3 {font-variant-ligatures: no-common-ligatures; color: #703daa}span.s4 {font-variant-ligatures: no-common-ligatures; color: #272ad8}span.s5 {font-variant-ligatures: no-common-ligatures; color: #000000}
func gcb(x:Int,_ y:Int) -> Int{
var a = x < y ? x : y
while a > 1{
if x % a == 0 && y % a == 0{
return a
}
a -= 1
}
return 1
}
以上代碼雖然可以求出最大公約數(shù) 但是太low了 這里介紹一個(gè)方法(短除法)就是較大的數(shù)除以較小的數(shù),如果除得盡較小數(shù)就是最大公約數(shù),如果除不盡就取其余數(shù),用較小數(shù)除以余數(shù),如果除得盡,余數(shù)就是最大公約數(shù),如果不,繼續(xù)除直到除得盡,除得盡的那個(gè)余數(shù)為最大公約數(shù),這里用了遞歸,比循環(huán)的效率也高很多,當(dāng)然逼格也高很多。
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo}span.s1 {font-variant-ligatures: no-common-ligatures; color: #bb2ca2}span.s2 {font-variant-ligatures: no-common-ligatures}span.s3 {font-variant-ligatures: no-common-ligatures; color: #703daa}span.s4 {font-variant-ligatures: no-common-ligatures; color: #31595d}span.s5 {font-variant-ligatures: no-common-ligatures; color: #272ad8}
func gcb(x:Int,_ y:Int) -> Int{
if x > y{
return gcb(y,x)
}
else if y % x != 0{
return gcb(y % x,x)
}
else{
return x
}
}
運(yùn)算符重載(為自定義的類(lèi)型定義運(yùn)算符)簡(jiǎn)單的說(shuō)就是個(gè)某個(gè)運(yùn)算符號(hào)加個(gè)什么功能,使使用者更加容易懂。
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px 'Heiti SC Light'; color: #008400}p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #4f8187}p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo}p.p4 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; min-height: 16.0px}span.s1 {font: 14.0px Menlo; font-variant-ligatures: no-common-ligatures}span.s2 {font-variant-ligatures: no-common-ligatures}span.s3 {font-variant-ligatures: no-common-ligatures; color: #bb2ca2}span.s4 {font-variant-ligatures: no-common-ligatures; color: #000000}span.s5 {font-variant-ligatures: no-common-ligatures; color: #31595d}
//運(yùn)算符重載(為自定義的類(lèi)型定義運(yùn)算符)
func +(one:Fraction,two:Fraction) -> Fraction{
return one.add(two)
}
func -(one:Fraction,two:Fraction) -> Fraction{
return one.sub(two)
}
func *(one:Fraction,two:Fraction) -> Fraction{
return one.mul(two)
}
func /(one:Fraction,two:Fraction) -> Fraction{
return one.div(two)
}
開(kāi)火車(chē)式的給予方法就是在后面.方法就行,這里我犯的一個(gè)錯(cuò)就是返回值沒(méi)有弄成Fraction。
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo}p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; min-height: 16.0px}span.s1 {font-variant-ligatures: no-common-ligatures}span.s2 {font-variant-ligatures: no-common-ligatures; color: #bb2ca2}span.s3 {font-variant-ligatures: no-common-ligatures; color: #4f8187}
func add(otherfraction:Fraction) -> Fraction{
return Fraction(num: _num * otherfraction._den + _den * otherfraction._num, den: _den * otherfraction._den)
}
func sub(otherfraction:Fraction) -> Fraction{
return Fraction(num: _num * otherfraction._den - _den * otherfraction._num, den: _den * otherfraction._den)
}
func mul(otherfraction:Fraction) -> Fraction{
return Fraction(num: _num * otherfraction._num , den: _den * otherfraction._den)
}
func div(otherfraction:Fraction) -> Fraction{
return Fraction(num: _num * otherfraction._den , den: _den * otherfraction._num)
}
這里有個(gè)小知識(shí)點(diǎn)可以屏蔽名字字符串中最后一個(gè)字
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; min-height: 16.0px}p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo}span.s1 {font-variant-ligatures: no-common-ligatures}span.s2 {font-variant-ligatures: no-common-ligatures; color: #bb2ca2}span.s3 {font-variant-ligatures: no-common-ligatures; color: #4f8187}span.s4 {font-variant-ligatures: no-common-ligatures; color: #3d1d81}span.s5 {font-variant-ligatures: no-common-ligatures; color: #703daa}span.s6 {font-variant-ligatures: no-common-ligatures; color: #d12f1b}
let displayName = _name.substringToIndex(_name.endIndex.predecessor())
return displayName + "*"
在swift里面的值不能給空。除非自帶?,這是swift一個(gè)特點(diǎn)。
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #008400}p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo}p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #4f8187}span.s1 {font-variant-ligatures: no-common-ligatures; color: #000000}span.s2 {font-variant-ligatures: no-common-ligatures}span.s3 {font: 14.0px 'Heiti SC Light'; font-variant-ligatures: no-common-ligatures}span.s4 {font-variant-ligatures: no-common-ligatures; color: #bb2ca2}span.s5 {font-variant-ligatures: no-common-ligatures; color: #4f8187}span.s6 {font-variant-ligatures: no-common-ligatures; color: #3d1d81}
//發(fā)牌
func deal() -> Card?{
if hasMoreCards{
return cardsArray.removeFirst()
}
return nil
}
這里有個(gè)小結(jié),以后遇到要你打亂數(shù)組里面值得位置就用這個(gè)方法,一個(gè)循環(huán)然后給出另外一個(gè)數(shù)組里面的值,用元組進(jìn)行兩兩交換位置,另外一個(gè)值隨機(jī)變換,循環(huán)停止交換停止。這里我開(kāi)始想到的用數(shù)組和字典來(lái)解決,就是用一個(gè)for循環(huán)把數(shù)組里面的值弄到字典里面去,利用字典的無(wú)序性打亂數(shù)組里面的值得位置 ,然后在利用一個(gè)for循環(huán)把字典里面的value賦給數(shù)組。但是老師說(shuō)字典并不是無(wú)序的,是另外一種有序,只是不是我們正常的那種有序而已。
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #008400}p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo}p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #4f8187}p.p4 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; min-height: 16.0px}span.s1 {font-variant-ligatures: no-common-ligatures; color: #000000}span.s2 {font-variant-ligatures: no-common-ligatures}span.s3 {font: 14.0px 'Heiti SC Light'; font-variant-ligatures: no-common-ligatures}span.s4 {font-variant-ligatures: no-common-ligatures; color: #bb2ca2}span.s5 {font-variant-ligatures: no-common-ligatures; color: #31595d}span.s6 {font-variant-ligatures: no-common-ligatures; color: #272ad8}span.s7 {font-variant-ligatures: no-common-ligatures; color: #4f8187}span.s8 {font-variant-ligatures: no-common-ligatures; color: #703daa}
//洗牌
func shuffle(){
reset()
for i in 0..<cardsArray.count{
let j = randomInt(0,max: UInt32(cardsArray.count - 1))
(cardsArray[i],cardsArray[j]) = (cardsArray[j],cardsArray[i])
}
}
這里是枚舉 還有調(diào)用枚舉的方法也是比較特殊,注意觀看以下代碼便是。
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo}p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; min-height: 16.0px}span.s1 {font-variant-ligatures: no-common-ligatures; color: #bb2ca2}span.s2 {font-variant-ligatures: no-common-ligatures}span.s3 {font-variant-ligatures: no-common-ligatures; color: #703daa}span.s4 {font-variant-ligatures: no-common-ligatures; color: #d12f1b}span.s5 {font: 14.0px 'Apple Color Emoji'; font-variant-ligatures: no-common-ligatures; color: #d12f1b}
enum Suite:String{
case Spade = "??"
case Heart = "??"
case Club = "??"
case Diamond = "??"
}
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo}span.s1 {font-variant-ligatures: no-common-ligatures}span.s2 {font-variant-ligatures: no-common-ligatures; color: #bb2ca2}span.s3 {font-variant-ligatures: no-common-ligatures; color: #4f8187}span.s4 {font-variant-ligatures: no-common-ligatures; color: #31595d}
let suites = [Suite.Spade,.Heart,.Club,.Diamond]
可以將子類(lèi)型的對(duì)象賦值給父類(lèi)型的變量(因?yàn)樽宇?lèi)跟父類(lèi)之間是IS-A關(guān)系)
如果要將父類(lèi)型的變量轉(zhuǎn)換成子類(lèi)型需要用as運(yùn)算符進(jìn)行類(lèi)型轉(zhuǎn)換
如果能夠確認(rèn)父類(lèi)型的變量中就是某種子類(lèi)型的對(duì)象可以用as!進(jìn)行轉(zhuǎn)換
如果不確定父類(lèi)型的變量中是哪種子類(lèi)型可以用as?嘗試轉(zhuǎn)換
繼承: 從已有的類(lèi)創(chuàng)建新類(lèi)的過(guò)程
提供繼承信息的稱(chēng)為父類(lèi)(超類(lèi)/基類(lèi))
得到繼承信息的稱(chēng)為子類(lèi)(派生類(lèi)/衍生類(lèi))
通常子類(lèi)除了得到父類(lèi)的繼承信息還會(huì)增加一些自己特有的東西
所以子類(lèi)的能力一定比父類(lèi)更強(qiáng)大
繼承的意義在于子類(lèi)可以復(fù)用父類(lèi)的代碼并且增強(qiáng)系統(tǒng)現(xiàn)有的功能
在做面向?qū)ο蟮膯?wèn)題上,一定要事先理清思路再下手,不然越做越混亂,父類(lèi)的確定,下面的屬性,還有具體方法,一定要所有子類(lèi)都滿足,也就是所有子類(lèi)取并集,而子類(lèi)酒會(huì)繼承父類(lèi)的功能,甚至在繼承父類(lèi)的功能上做些改變。
// 父類(lèi)有的方法子類(lèi)可以重新實(shí)現(xiàn) 這個(gè)過(guò)程叫方法重寫(xiě)
// 需要在方法前添加override關(guān)鍵字
// 重寫(xiě)有時(shí)也被稱(chēng)為置換/覆蓋/覆寫(xiě)
注意這里是重寫(xiě),不要和重載搞混了。