//
关于类的示例
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