您的位置:首页 > 运维架构 > Linux

linux samba 客户端配置

2011-10-07 11:55 246 查看
在面向对象的分析与设计的方法中,为了增强一个类的功能,我们可以通过继承机制从父类继承下来一些成员,然后再根据自己的需要在子类中添加一些成员,这样我们就可以得到增强功能的新类了,但是这种方式还受到一些限制,继承过程比较繁琐,类继承可能被禁止,有些功能也可能无法继承。

在Swift中可以使用一种扩展机制,在原有类型(类,结构体和枚举)的基础上添加新功能,扩展是一种轻量级的继承机制,即使原有类型限制继承,我们仍然可以通过扩展机制继承原有类型的功能。

扩展机制的另一个优势是:扩展的类型可以是类、结构体和枚举,而继承只能是类,不能是结构体和枚举。

一、声明扩展

声明扩展的类型如下:

extension 类型名 {
//添加新功能

}

声明扩展的关键字是extension,类型名是Swift中已有的类型,包括类、结构体和枚举,但是也可以扩展整型,浮点型,布尔型,字符串等基本数据类型,这是因为这些类型也基本是结构体类型;

Swift中的扩展机制可以在原类型增加的新功能包括:

1、实例计算属性和静态计算属性;

2、实例方法和静态方法;

3、构造器;

4、下标;

二、扩展计算属性

在原类型上扩展计算属性,包括实例计算属性和静态计算属性,这些添加计算属性的定义,与普通计算属性的定义是一致。

1、Int类型扩展

extension Int {
var erroMessage:String {
var erroStr = ""
switch(selef){
case -7 :
erroStr = "没有数据!"
case -6:
erroStr = "日期没有输入"
case -5:
erroStr ="内容没有输入"
case -4 :
erroStr = "ID没有输入"
case -3:
erroStr = "数据访问失败"
case -2:
erroStr = "您的账号最多能输入10条数据"
case -1:
erroStr = "用户不存在"
default:
erroStr = ""
}
return erroStr
}
}
let message = (-7).erroMessage
println("Erro Code:-7,Erro Message:\(message)


2、静态属性的示例

struct Account {
var amount:Double = 0.0
var owner:String = ""
}
extention Account {
static var investRate:Double {
return 0.668
}
}
此外,在扩展中不仅可以定义只读计算属性,还可以定义读写计算属性、实例计算属性和静态计算属性,它们的定义方式和原类中的定义方式是一样的

三、扩展方法
可以在原类型基础上扩展方法,包括实例方法和静态方法,这些添加方法的定义与普通的方法的定义是一致的;

extension Double {
static var interestRate:Double = 0.668
func interestBy1()->Double {
return self.Double.interestRate
}
mutating func interestBy2()->Double {
self = self * Double.interestRate
}
static func interestBy3(amount:Double)->Double {
return amount * Double.interestRate
}
}


四、扩展构造器

扩展类型的时候,也可以添加新的构造器

示例:

struct Rectangle {
var width:Double
var height:Double

init(width:Double,height:Double) {
self.width = width
self.height = height
}
function description()-String {
return "Rectangle"
}
}
extension    Rectangle {
init(length:Double){
self.init(width:length,height:length)
}
}
var rect = Rectangle(width:20.0.height:30.0)
var square = Rectangle(length:10)


扩展类的时候能向类中添加新的便利构造器,但不能添加新的指定构造器和析构器,指定的构造器和析构器只能由原类型继承;

class Person {
var name:String
var age:Int
func description()->String{
return "\(name):\(age)"
}
init(name:String,age:Int){
self.name = name
self.age = age
}
}
extension Person {
convenience init(name:String){
self.init(name:name,age:10)
}
}


五、扩展下标

可以把下标看成是特殊的属性,可以实现索引访问属性,我们可以在原有类型的基础上扩展下标功能。

字符串本身没有提供根据下标访问字符的功能,下面扩展字符串,实现下标访问字符功能,如下:

extension String {
subscript(index:Int)->String{
if index > countElement(self){
return ''"
}
var c:String = ""
var i:Int = 0
for character in self {
if (i == index) {
c = String(character)
break
}
i++
}
return c
}
}


本文出自 “平凡之路” 博客,请务必保留此出处http://linjohn.blog.51cto.com/1026193/1623434
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: