编辑代码

/*class shape {
var name : String?
var sides : Int?
var origin : CGPoint?
var lineColor : UIColor = UIColor.red
var fillColor : UIColor = UIColor.green
var lineWidth : CGFloat =2
init(name : String, sides : Int, origin :CGPoint) {
self.name=name
 self.sides = sides 
 self.origin = origin
}
 func sayHello(){
    print("Shape is \(name!),sides \(sides!), and origincord is(\
(origin!.x),\(origin!.y)) ")
 }
}
class viewController: UIviewCon troller {
    override func viewDidLoad() { 
       super.viewDidLoad()
let myShape = Shape(nam e:"BaseShape", sides: 0, origin: CGPoint
(x:0,y:0))
    myShape.sayHello()
    }
}*/


/*import ulkit
class Shape {
var name : string?
var sides : Int?
var origin : CGPoint?
var lineColor : UIColor = UIColor.red
var fillcolor : UIColor = UIColor.green
var lineWidth : CGFloat = 2
init(name : String, sides : Int, origin : CGPoint) {
self.name=name
self.sides=sides
 self.origin=origin
 func sayHello(){
     print("Shape:\(name!),sides \(sides!), origin (\(origin!.x),\
(origin!.y)) ")
   }
}

class Czfview : UIView {
 var shape : shape?
 override func draw(_ rect: CGRect) {
guard let s = shape else {
    return
}
 s.sayHello()
     }
}
class ViewController: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()
let myShape = Shape(name:"B aseShape", sides: 0,origin: CGPoint(x:
0,y:0))
let width = self.view.fral me.size.width
let height = self.view.fr ame.size.height
let myView=Czfview(frai me: CGRect(x: 0, y: 0, width: width,
height: height))
myView.shape=myShape
self.view.addSubview(myView)
    }
}*/

/*func drawBezierPath(){
let path = UIBeziPath()
let center :CGPoint =CGPoint(x: 100,y : 100)
let radius :cgfloa
path.addArc(withcenendAngle:cGFloat.pi*2,clockwiater: center, radius: radius, startAngle: 0 se: true)
path.lineWidth =5
UIColor.red.setStroke()
 path.stroke()
 }*/


 /*class Rectangle : Shape {
 var size :cgsize?
init(name: String, origin:CGPointsize:CGSize){
    super.init(name: name, origin: origin) 
    self.size=size
}
convenience init(origin: CGPoint, size:CGSize){
self.init(name: "Rectangle", origin: origin, size: size)}
}
override func drawBezierPath(){
print("Draw\(name!)")
let path =UIBezierPath(rect:CGRect(origin: origin!, size: size!))
path.lineWidth = lineWidth!
 lineColor?,setStroke()
path.stroke()
   }
}*/


/*class Rectangle :Shape {
 var size :cgsize?
var corner : cfloat?
init(name: String,origin:CGPoi ntsize:CGSize,corner:CGFloat){
   super.init(name: name,or cigin: origin)
    self.size=size
self.corner=corner
}
convenience init(origin: CGPoint,size :CGSize, corner : CGFloat = 0) {
corner)
self.init(name:"Rectangle", origin: origin, size: size, corner :
}
override func drawBezierPath(){
print("Draw\(name!)")
let path=UIBezierPath(roundedRect:CGRect(origin:origin!, size:
size!),cornerRadius: corner!)

path.lineWidth = lineWidth!
 lineColor?.setstroke()
path,stroke()
   }
}*/


/*class circle : Shape {
var center : cGPoint?
var raduis : cGFloat? 
var size : cgsize?

   init(name: String,origin h: CGPoint, center : CGPoint, raduis : CGFloat,
size:CGSize){
    super.init(center:name, origin: origin)
self.center=centel
 self.raduis = radui
self.size=size
}
convenience init(center :CGPoint,raduis :CGFloat){ 
letx=center.x-r caduis
 let y=center.y-r caduis
     self.init(name: "circ le", origin: CGPoint(x:xy:y), center: center,
raduis: raduis, size: CGSize(widt h: raduis, height: raduis))
}
}
convenience init(center :CGPoint,size:CGSize){ 
let x=center.x- size.width/2 
let y= center.y- size.height/2 
      self.init(name: "Ova l/Ellipse", origin: CGPoint(x:x,y:y), center:
center, raduis: 0, size: size)
}
override func drawBezie rPath(){
print ("Draw \(name!) ")
let path = UIBezier Path(ovalIn: CGRect(origin: origin!,size:
size!))
path.lineWidth = lin eWidth!
 lineColor?.setstroke()
path.stroke()
     }
} */


/*class Polygons :Shape {
var points : Array<cGPoint?
init(name: String,origin: CGPoint,points : Array<CGPoint> ){ 
    super.init(name: name, origin: origin) 
    self.points =points}
}
convenience init(points :A Array<cGPoint> ) {
    if points.count == 3 {
    self.init(name:"Triangel", origin: points.first!, points:
points)

else if points.count >= 3 {
self.init(name: "Polygons", origin: points.first!, points: points)}
else {
let origin = CGPoint(x: 0, y: 0)
self.init(name: "Error", origin: origin, points: points)
}
override func drawBezierPath(){
print ("Draw \(name!)")
 if(name == "Error") {
   return
}*/


import uikit
import Foundation import AVFoundation
class Shape {
var name : string?
var soundplayer : AVAudioPlayer?
var soundfile : string?
var path : UIBezierPath?
var selectedflag : Bool =false
var origin : cGPoint?
var lineColor : UIColor? = UIColor.red
var fillcolor : UIColor? = UIColor.green
var lineWidth : CGFloat? ?=5 
init(name :string, origin : CGPoint,soundFile : String - “Do.m4a"){
  self.name=name
  self.origin =origin
  self.soundfile = soundFile

convenience init(origin : CGPoint){
self.init(name: "Shape Bassclass", origin: origin)}
 func drawBezierPath(){
print("Draw \(name!)")
}
func playAudio(){
   print("Play sound:\(soundFile!)")
   }
let path =Bundle.main.path(forResource:soundFile,ofType:nil) 
let url=URL(fileURLWithPath: path!)
soundPlayer=try? AVAudioPlayer(contents0f:url) soundPlayer?.play()
soundplyer?play()
 }
 ay()

func isSelected(poi nt : cGPoint) -> Bool{
if (path?.conta ins(point))! {
selectedflac g = true return true
}
else {
selectedflag = false 
return false
          }
   
      }
         
 }
 class Line :Shape {
var start : CGPoint?
var end : CGPoint?

init(name: String,origin: CGPoint, start : CGPoint, end : CGPoint, 
soundfile :String="FA.m4a"){
super.init(name: name, origin: origin,soundFile:soundFile) 
self.start = start
 self.end=end
 }
 convenience init(start: CGPoint,end:CGPoint){
self.init(name:"Line",origin: start, start: start, end: end)
override func drawBezierPath(){
print("Draw\(name!)")
 path = UIBezierPath()
 path?.move(to: start!)
 path?.addLine(to: end!)
path? lineWidth = lineWidth!