2010-06-22 83 views
1

我已經多年的Java程序員,但只有iPhone/Obj-c幾個月。每當我覺得我對這種語言感到舒服時,就會發生一些奇怪的事情。爲什麼下面的代碼生成「初始化時不兼容的類型」編譯錯誤?看起來很直截了當。 '雙'是一個原始的權利?!?「初始化時不兼容的類型」錯誤沒有意義

-(void) testCalling{ 
    double myDoub = [self functionReturningDouble:3.0]; 
} 


-(double) functionReturningDouble:(double) input{ 
    return 1.0; 
} 
+1

是以前聲明的第二種方法嗎?否則,返回類型被假定爲'id'。 – 2010-06-22 08:33:33

+0

另外,在實現('.m')文件頂部的類擴展中聲明私有/內部方法是一種很好的做法。這種做法消除了對私人/內部方法的實施和使用的依賴。 (Apple Docs:http://devworld.apple.com/mac/library/documentation/Cocoa/Conceptual/ObjectiveC/Articles/ocCategories.html#//apple_ref/doc/uid/TP30001163-CH20-SW2) – ohhorob 2010-06-30 04:52:27

回答

0

嘗試交換方法聲明。它可以是範圍的問題,因爲喬治注意到:

-(double) functionReturningDouble:(double) input{ 
    return 1.0; 
} 

-(void) testCalling{ 
    double myDoub = [self functionReturningDouble:3.0]; 
} 

在Objective-C(這是有效的C),一種方法不「存在」,只有當它已被定義或之前聲明。

+1

相反,方法簽名僅在這些情況下已知:) – 2010-06-22 12:37:06

+0

謝謝!不敢相信花了這麼長時間才發現這一點。 – 2010-06-22 23:45:44

+0

只是另一點..出於利益爲什麼順序似乎不是一個int方法的問題,但只有雙重? – 2010-06-30 05:37:46

相關問題