//关于类的示例
class Shape{//首字母大写
var numberOfSides = 0
func simpleDescription() -> String{
return"A shape with \(numberOfSides) sides."
}
}
var shape = Shape()//注意编译器要求一定的编程规范
shape.numberOfSides = 7
var sharpeDescription = shape.simpleDescription()
class NamedShape {
var numberOfSides: Int = 0
var name: String
init(name: String){//构造器,用于初始化,deinit析构函数用来在清理中执行一些操作
self.name = name
}
func simpleeDescription() -> String{
return "A shape wit \(name) sides."
}
}
var nameShape = NamedShape( name: "Zhangwei")
nameShape.numberOfSides = 7
nameShape.simpleeDescription()
//子类
class Square: NamedShape{//:后为父类名
var sideLength: Double
init(sideLength:Double, name: String) {
self.sideLength = sideLength
super.init(name: name)
numberOfSides = 4
}
func area() -> Double{
return sideLength * sideLength
}
override func simpleeDescription() -> String {//重写父类方法的话需要override 标记
return "A square with sides of \(sideLength)"
}
}
let test = Square(sideLength: 5.2, name: "ZhiMing")
test.area()
test.simpleeDescription()
class EquilateralTriangle: NamedShape{
var sideLength:Double
init(sideLength:Double,name: String) {
self.sideLength = sideLength
super.init(name: name)
numberOfSides = 3
}
var perimeter:Double{
get{
return 3.0 * sideLength
}
set{
sideLength = newValue / 3.0//newVale为新值,如果需要在设置一个新值运行一些代码可以用willSet和didSet
}
}
override func simpleeDescription() -> String {
return "An equ length\(sideLength)"
}
}
var triangle = EquilateralTriangle(sideLength: 3.1, name: "a triangle")
triangle.perimeter
triangle.perimeter = 9.9
triangle.sideLength
class TriangleAndSquare {//willSet的示例,不过我并没有完全明白
var triangle:EquilateralTriangle{
willSet{
square.sideLength = newValue.sideLength
}
}
var square:Square{
willSet{
triangle.sideLength = newValue.sideLength
}
}
init(size: Double,name: String){
square = Square(sideLength: size, name: name)
triangle = EquilateralTriangle(sideLength: size, name: name)
}
}
var triangleAndSquare = TriangleAndSquare(size: 10, name: "another test shape")
triangleAndSquare.square.sideLength
triangleAndSquare.triangle.sideLength
triangleAndSquare.square = Square(sideLength: 50, name: "larger Square")
triangleAndSquare.triangle.sideLength
let optionalSquare: Square? = Square(sideLength: 2.5, name: "optional square")
let sideLength = optionalSquare?.sideLength
class Shape{//首字母大写
var numberOfSides = 0
func simpleDescription() -> String{
return"A shape with \(numberOfSides) sides."
}
}
var shape = Shape()//注意编译器要求一定的编程规范
shape.numberOfSides = 7
var sharpeDescription = shape.simpleDescription()
class NamedShape {
var numberOfSides: Int = 0
var name: String
init(name: String){//构造器,用于初始化,deinit析构函数用来在清理中执行一些操作
self.name = name
}
func simpleeDescription() -> String{
return "A shape wit \(name) sides."
}
}
var nameShape = NamedShape( name: "Zhangwei")
nameShape.numberOfSides = 7
nameShape.simpleeDescription()
//子类
class Square: NamedShape{//:后为父类名
var sideLength: Double
init(sideLength:Double, name: String) {
self.sideLength = sideLength
super.init(name: name)
numberOfSides = 4
}
func area() -> Double{
return sideLength * sideLength
}
override func simpleeDescription() -> String {//重写父类方法的话需要override 标记
return "A square with sides of \(sideLength)"
}
}
let test = Square(sideLength: 5.2, name: "ZhiMing")
test.area()
test.simpleeDescription()
class EquilateralTriangle: NamedShape{
var sideLength:Double
init(sideLength:Double,name: String) {
self.sideLength = sideLength
super.init(name: name)
numberOfSides = 3
}
var perimeter:Double{
get{
return 3.0 * sideLength
}
set{
sideLength = newValue / 3.0//newVale为新值,如果需要在设置一个新值运行一些代码可以用willSet和didSet
}
}
override func simpleeDescription() -> String {
return "An equ length\(sideLength)"
}
}
var triangle = EquilateralTriangle(sideLength: 3.1, name: "a triangle")
triangle.perimeter
triangle.perimeter = 9.9
triangle.sideLength
class TriangleAndSquare {//willSet的示例,不过我并没有完全明白
var triangle:EquilateralTriangle{
willSet{
square.sideLength = newValue.sideLength
}
}
var square:Square{
willSet{
triangle.sideLength = newValue.sideLength
}
}
init(size: Double,name: String){
square = Square(sideLength: size, name: name)
triangle = EquilateralTriangle(sideLength: size, name: name)
}
}
var triangleAndSquare = TriangleAndSquare(size: 10, name: "another test shape")
triangleAndSquare.square.sideLength
triangleAndSquare.triangle.sideLength
triangleAndSquare.square = Square(sideLength: 50, name: "larger Square")
triangleAndSquare.triangle.sideLength
let optionalSquare: Square? = Square(sideLength: 2.5, name: "optional square")
let sideLength = optionalSquare?.sideLength