(19)[Swift]Swiftの属性を知っていますか?
4433 ワード
1.記憶タイプの属性の初期化ストレージタイプ 記憶タイプの属性の初期化、記憶タイプの属性は、構造体またはオブジェクトの作成時に の初期化を一度保証する必要がある.は初期化方法で初期化され、宣言時に初期化されない場合、init関数に必要な である.は直接宣言する時に初期化して、宣言する時に初期化することがあって、init関数の中で必要ではありません optional属性非強制初期化 structはデフォルトですべての属性のinit関数を提供しますが、classは ではありません.
2.ストレージタイプ属性のリスニング
3.計算タイプの属性計算属性の取得 計算属性の設定
4.リロード属性
5.クラスの静的属性
Swiftではjavaのように1つのクラスで静的変数を宣言できますが、OCはクラスメソッドを使用してこのような効果を達成する必要があります. Swift OC
比較するとやはりSwift文法で、もっと簡潔になっていることがわかります.
struct YXRect {
var origin:CGPoint
var width:CGFloat
var height:CGFloat
}
//
//class YXRect {
// var origin:CGPoint
// var width:CGFloat
// var height:CGFloat
// init(width:CGFloat,height:CGFloat){
// self.width = width
// self.height = height
// }
//}
class YXRect {
var origin:CGPoint
var width:CGFloat
var height:CGFloat
init(origin:CGPoint,width:CGFloat,height:CGFloat){
self.origin = origin
self.width = width
self.height = height
}
}
class YXRect {
var origin:CGPoint = CGPoint(x:1,y:1)
var width:CGFloat
var height:CGFloat
init(width:CGFloat,height:CGFloat){
self.width = width
self.height = height
}
}
//
class YXRect {
var origin:CGPoint?
var width:CGFloat
var height:CGFloat
init(width:CGFloat,height:CGFloat){
self.width = width
self.height = height
}
}
struct YXRect {
var origin:CGPoint
var width:CGFloat
var height:CGFloat
}
//
//class YXRect4 {
// var origin:CGPoint
// var width:CGFloat
// var height:CGFloat
//
//}
class YXRect{
var origin:CGPoint
var width:CGFloat
var height:CGFloat
init(origin:CGPoint,width:CGFloat,height:CGFloat){
self.origin = origin
self.width = width
self.height = height
}
}
2.ストレージタイプ属性のリスニング
struct YXRect {
var origin:CGPoint
var width:CGFloat{
willSet(newValue){
print("will set \(newValue)")
}
didSet(newValue){
print("did set \(newValue)")
if(newValue>200){
width = 200
}
}
}
var height:CGFloat
init(origin:CGPoint,width:CGFloat,height:CGFloat){
self.origin = origin
self.width = width
self.height = height
}
}
3.計算タイプの属性
struct YXRect {
var origin:CGPoint
var width:CGFloat
var height:CGFloat
init(origin:CGPoint,width:CGFloat,height:CGFloat){
self.origin = origin
self.width = width
self.height = height
}
// get
var center : CGPoint {
print(" center")
let x = self.origin.x + self.width*0.5
let y = self.origin.y + self.height * 0.5
return CGPoint(x:x,y:y)
}
}
struct YXRect {
var origin:CGPoint
var width:CGFloat
var height:CGFloat
init(origin:CGPoint,width:CGFloat,height:CGFloat){
self.origin = origin
self.width = width
self.height = height
}
// , get set
var center : CGPoint {
get{
print(" center2")
let x = self.origin.x + self.width*0.5
let y = self.origin.y + self.height * 0.5
return CGPoint(x:x,y:y)
}
set(newValue){
print(" center2")
self.origin.x = newValue.x - self.width * 0.5
self.origin.y = newValue.y - self.height * 0.5
}
}
}
4.リロード属性
class Account{
var name : String
// self , self , unowned
lazy var hellow :String = {[unowned self] in
print(" ")
return "hellow \(self.name)"
}()
init(name:String){
self.name = name
}
}
var accout = Account(name:"aaa")
accout.hellow
accout.hellow
accout.hellow
//" "
5.クラスの静的属性
Swiftではjavaのように1つのクラスで静的変数を宣言できますが、OCはクラスメソッドを使用してこのような効果を達成する必要があります.
class Person {
static var type = " "
}
//
Person.type //
@interface Person : NSObject
+(NSString *)type;
@end
@implementation Person
static NSString *type = @" ";
+(NSString *)type{
return type;
}
@end
[Person type];
比較するとやはりSwift文法で、もっと簡潔になっていることがわかります.