2013-07-03 29 views
-4

我已經下載了示例代碼。它有一個代碼行像不明白示例代碼中1代碼行的含義

CGPointSPUserResizableViewAnchorPointPair upperRight = { CGPointMake(self.bounds.size.width, 0.0), SPUserResizableViewUpperRightAnchorPoint }; 

但是,當我把它改寫:

CGPointSPUserResizableViewAnchorPointPair lowerMiddle; 
if (self.isScaled) 
{ 
    lowerMiddle = { CGPointMake(self.bounds.size.width/2, self.bounds.size.height), SPUserResizableViewLowerMiddleAnchorPoint }; 
} 

,並出現了錯誤。所以我不知道這段代碼的含義是什麼。

+0

什麼樣的代碼?什麼錯誤?你預期的結果是什麼? –

+1

可能出現[重新指派結構在C](http://stackoverflow.com/questions/10298070/reassign-struct-in-c) – tia

+2

-1說「出現錯誤」,並沒有引用確切的錯誤。 –

回答

2

從您的示例代碼struct聲明如下:

typedef struct CGPointSPUserResizableViewAnchorPointPair { 
    CGPoint point; 
    SPUserResizableViewAnchorPoint anchorPoint; 
} CGPointSPUserResizableViewAnchorPointPair; 

以下是您引用的代碼行,將其重新格式化以便於閱讀:

CGPointSPUserResizableViewAnchorPointPair upperRight = { 
    CGPointMake(self.bounds.size.width, 0.0), 
    SPUserResizableViewUpperRightAnchorPoint 
}; 

由於此行創建變量,因此可以使用複合初始值設定項對其進行初始化。複合初始值設定項是一個大括號包含列表,其中包含每個struct成員的初始值,順序爲。所以CGPointMake調用的返回值初始化爲upperRight.point,而SPUserResizableViewUpperRightAnchorPoint變量初始化爲upperRight.anchorPoint

在您重寫的代碼中對lowerMiddle的賦值不會創建變量,您不能使用複合初始值設定項。您需要以不同的方式設置結構成員。一種方法是分配給每個成員依次爲:

CGPointSPUserResizableViewAnchorPointPair lowerMiddle; 
if (self.isScaled) 
{ 
    lowerMiddle.point = CGPointMake(self.bounds.size.width/2, self.bounds.size.height); 
    lowerMiddle.anchorPoint = SPUserResizableViewLowerMiddleAnchorPoint; 
} 

的另一種方式是使用一個化合物字面。字面的化合物就像在一個變量定義的化合物初始化,除了你必須「劇組」它爲正確的類型:

CGPointSPUserResizableViewAnchorPointPair lowerMiddle; 
if (self.isScaled) 
{ 
    lowerMiddle = (CGPointSPUserResizableViewAnchorPointPair){ 
     CGPointMake(self.bounds.size.width/2, self.bounds.size.height), 
     SPUserResizableViewLowerMiddleAnchorPoint 
    }; 
} 

腳註1.還有其他形式的複合初始化,但這是最簡單的,並且是你的例子使用的形式。

0

用於初始化結構的語法{ <field>, <field> }只能用於變量初始值設定項中。

編輯:

基礎上TIA鏈接的問題,這應該工作:

lowerMiddle = (CGPointSPUserResizableViewAnchorPointPair) { 
    CGPointMake(self.bounds.size.width/2, self.bounds.size.height), 
    SPUserResizableViewLowerMiddleAnchorPoint 
}; 
+0

tks尋求幫助 – user2434837