我有「classmap.m」和annotation.mi在「classmap.m」中有一個座標值,我需要指定一個值另一個班級annotation.m。如何聲明一個變量,可以在class1.m和class Bm中使用
ex: class1.m double start_long;
我想給在另一個類傳遞值(annotation.m)
annotation.m
annotation.longitude = Start_long;
我該怎麼做,請給出一些例子。
在此先感謝
我有「classmap.m」和annotation.mi在「classmap.m」中有一個座標值,我需要指定一個值另一個班級annotation.m。如何聲明一個變量,可以在class1.m和class Bm中使用
ex: class1.m double start_long;
我想給在另一個類傳遞值(annotation.m)
annotation.m
annotation.longitude = Start_long;
我該怎麼做,請給出一些例子。
在此先感謝
您可以在的appdelegate變量,並在項目的任何地方訪問它。 訪問它像
賦值
AppDelegate *app = [[UIApplication sharedApplication]delegate];
appd.start_long = -17.002// assign some value here
讀取值
AppDelegate *app = [[UIApplication sharedApplication]delegate];
double dVal = appd.start_long ;
應用程序代表不是傾銷的地方,因爲您不知道如何分享。它的角色是(它所說的)成爲UIApplication實例的代表。 –
而不是創建新的單例類嘗試使用現有的單例類(Appdelegate) – Tendulkar
一個更好,更高效,有效和清潔的方法是使用Singleton模式。一個好的方法是保持AppDelegate更清潔並避免將全局變量保留在那裏。總是嘗試使用Singleton類和對象來保持全局變量。
而不是創建新的單例類嘗試使用現有的單例類(Appdelegate) – Tendulkar
如果classmap.m和annotaion.m都是從NSObject繼承的,那麼它就是簡單的註釋:classmap。就可以訪問類映射的特性
類映射
@interface classmap : NSObject
@property double longitude;
@end
#import "classmap.h"
@implementation classmap
@synthesize longitude;
@end
Annoataion
@interface annotation : classmap
@property double start_long;
@end
#import "annotation.h"
@implementation annotation
@synthesize start_long;
@end
現在的分配可以很容易地在annotation.longitude = Start_long做你需要
的地方如果我正確理解您的答案,這是正確的方法。我會給代碼示例,這將極大地幫助OP。由於這是一個非常基本的問題。 – user523234
你需要什麼樣的解釋@ user523234 – Vinodh
Singleton
模式是一種武器應該謹慎使用,因爲它對使用它的所有東西都具有依賴性。
雖然使用單身人士將實現你現在想要的是訪問ClassMap
中的一個屬性,但你爲未來的編碼問題設置了自己。
例如,當您有多個ClassMap
實例時會發生什麼?
單身人士更適合做普適工作的事情。東西是工具。 e.g [NSUserDefaults standardUserDefaults]
或[NSFileManager defaultManager]
一種不同的解決方案是使用Dependancy Injection其產生其中所需要的ClassMap
對象的對象Annotation
之間的直接連接。
簡單ClassMap
聲明屬性
@property double start_long;
您通過ClassMap
對象到Annotation
對象當實例。
Annotation.h
@interface Annotation:NSObject
-(instancetype)initWithClassMap:(ClassMap *)amap;
@end
和...
Annotation.m
@interface Annotation() {
ClassMap *_map;
}
@end
@implementation Annotation
-(instancetype)initWithClassMap:(ClassMap *)amap {
self = [super init];
if(self) {
_map = amap;
}
return self;
}
-(void)doSomething {
self.longitude = _map.start_long;
}
@end
另一種方法是使用delegation.In您classmap.m聲明
@protocol classmapDelegate <NSObject>
-(void)didchangeCoordinateValue:(double)longitude;
@end
註釋應確認該協議,當曾經在類映射值改變,你可以得到事件錫註釋類。
在Appdelegate中取變量並像AppDelegate * app = [[UIApplication sharedApplication] delegate]; appd.start_long = //在這裏指定一些值 – Tendulkar
更好的是你應該使用Singleton概念。 –
@NishantTyagi不,這是一個不好的解決方案。 –