- (instancetype)init;调用的时候,必须先进行实例化一个对象(alloc),然后调用init方法。 @H_404_0@2. 类型方法(加号开头)
+ (voID)animateWithDuration:(NSTimeInterval)duration animations:(voID (^)(voID))animations调用的时候,直接使用UIVIEw的类型就可以了。 @H_404_0@而在Swift中写法有所改变,它使用class和static关键字来标示。而且不仅仅是作用在类中,枚举和结构体(enum,struct)中也有相应的方法。 @H_404_0@在class类型上下文中,我们使用class;其他的使用static。 @H_404_0@一、作用于结构(注:代码中,有关存储属性及计算属性的知识,我会在后续章节进行详细的介绍。)
struct Point { let x: Double let y: Double // 存储属性 static let zero = Point(x: 0,y: 0) // 计算属性 static var ones: [Point] { return [ Point(x: 1,y: 1),Point(x: -1,Point(x: 1,y: -1),y: -1) ] } // 类型方法 static func add(p1: Point,p2: Point) -> Point { return Point(x: p1.x + p2.x,y: p1.y + p2.y) }}let p = Point(x: 3,y: 4)Point.zeroPoint.onesPoint.add(Point(x: 1,y: 2),p2: Point(x: 2,y: 1))
可以看到,在结构中,我们可以在其属性或者方法前面加static进行修饰,调用的时候,直接可以通过类型名称"Point" 点 出对应的属性或者方法。 @H_404_0@
@H_404_0@二、作用于类
class Square { // 类型属性,用class关键字 class var PI: Double{ return 3.14 }}
可以看到,在类中,我们可以在其属性或者方法前面加class进行修饰,调用的时候,直接Square.PI 就可以了。 代码中是对“计算属性”进行了class修饰。而这里的计算属性只是简写,我们也可以写成下面的方式:
class Square { class var PI: Double{ get { return 3.14 } }}@H_404_0@
@H_404_0@但需要注意的是,存储属性不能使用class进行修饰。
class Student { class var phone: String?}
编译后会报错:“class variables not yet supported” @H_404_0@而用static就可以了。
class Student { static var phone: String?}
三、作用于协议
protocol MyProtocol { static func foo() -> String}struct MyStruct: MyProtocol { static func foo() -> String { return "MyStruct" }}class MyClass { class func foo() -> String { return "MyClass" }}
可以看出,在protocol中定义的属性或者方法,是在其前面加上static修饰符的,但问题来了, 实现协议有可能是结构体或者枚举,也有可能是类。那实现体中应该使用什么修饰符?通过观察上面的写法可以看出:
在protocol中定义的方法或者计算属性,类型修饰符是static;在实现的结构或者枚举中,修饰符使用static,在实现的class中,修饰符使用class。
总结以上是内存溢出为你收集整理的Swift:实例方法和类型方法全部内容,希望文章能够帮你解决Swift:实例方法和类型方法所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)