我有几个obj-c类,每个类都需要一些在switch语句中使用的常量.
我曾尝试使用#define预处理器指令在.m文件中定义这些数字常量.所有这些常数都以'kCell'开头.这似乎运作良好,但无论我在项目中的哪个位置,Xcode的代码意义都会向我呈现每个'kCell'前缀常量.做#define常量具有全局范围是什么?如果是这样,那么定义纯本地类常量的最佳方法是什么,这些常量不会在其他类中使用类似命名的常量进行分类?
可能重复:
目标C中的常量
我在NSUserDefaults中存储了一些应用程序设置.NSStrings用作键.问题是我需要使用这些NSString键在整个应用程序中访问这些设置.在应用程序的某些部分访问时,我可能会错误输入此类字符串键.
在整个应用程序中,我都有这样的陈述
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"ReminderSwitch"];
BOOL shouldRemind = [[NSUserDefaults standardUserDefaults] boolForKey:@"ReminderSwitch"];
Run Code Online (Sandbox Code Playgroud)
如何以及在何处声明我可以在整个应用程序中访问的全局NSString常量.然后我将能够使用该常量而不必担心错误键入这些字符串键.
我理解在NSDictionary中使用常量作为你的名字以防止拼写错误(myName将自动完成vs @"myName"不会).
我正在使用中等大小的词典,现在和几次,我错误地输入了关键名称,并且不得不花一些时间追踪我想念拼写单词的地方.
我想知道,你认为设置常量命名方案是否值得?
我想为我的应用程序添加一些常量键,这些常量可以在程序中的任何地方访问.所以我在接口文件中声明了常量:
#import <UIKit/UIKit.h>
NSString * MIN_INTERVAL_KEY = @"MIN_INTERVAL_KEY";
NSString * MAX_TOBACCO_KEY = @"MAX_TOBACCO_KEY";
NSString * ICON_BADGE = @"ICON_BADGE";
@interface SmokingViewController : UIViewController {
}
Run Code Online (Sandbox Code Playgroud)
我想从MinIntervalViewController类访问它们:
- (void)viewDidAppear:(BOOL)animated {
NSUserDefaults *user = [NSUserDefaults standardUserDefaults];
if (user) {
self.selectedValue = [user objectForKey:MIN_INTERVAL_KEY];
}
[super viewDidAppear:animated];
}
Run Code Online (Sandbox Code Playgroud)
但是应用程序在MinIntervalViewController类中显示错误:
错误:'MIN_INTERVAL_KEY'未声明(首次使用此功能)
我错过了什么吗?任何帮助,将不胜感激.
谢谢
我想完成这篇文章中正在做的事情:Objective-C中的常量
但是,我想构建一个NSDictionary.
如果我这样做:
constants.h
extern NSArray *const mFooKeys;
extern NSArray *const mFooObjects;
extern NSDictionary *const mFooDictionary;
Run Code Online (Sandbox Code Playgroud)
constants.m
NSArray *const mFooKeys = [[NSArray alloc] initWithObjects:
@"Foo", @"Bar", @"Baz", nil];
NSArray *const mFooObjects = [[NSArray alloc] initWithObjects:
@"1", @"2", @"3", nil];
NSDictionary *const mFooDictionary = [[NSDictionary alloc] dictionaryWithObjects:mFooObjects
forKeys:mFooKeys];
Run Code Online (Sandbox Code Playgroud)
我是以dealloc发布的,一切都很好,还是有更多的东西?这个问题比一个"有问题"的问题更为谨慎,但我觉得如果没有意识到这一点,我真的可能会把它搞得一团糟.
可能重复:
目标C中的常量
我正在设计一个控制器,我需要一些常量(本地,只为那个控制器).看一下Apple提供的一些示例代码,我可以看到以下几行:
#import "Constants.h"
#define kTextFieldWidth 260.0
static NSString *kSectionTitleKey = @"sectionTitleKey";
static NSString *kSourceKey = @"sourceKey";
static NSString *kViewKey = @"viewKey";
const NSInteger kViewTag = 1;
Run Code Online (Sandbox Code Playgroud)
任何人都可以向我解释它们之间的区别是什么?我应该使用哪种款式?它们是否依赖于您分配给它们的对象/值的类型?含义用途:static NSString *用于字符串,#define浮点数和NSInteger整数?你如何做出选择?
好的,这与问题"目标C中的常量"有关.
我创建了Constants.h及其相应的Constants.m文件:
// Constants.h
extern int const BOOKS;
typedef enum SSDifficultyLevel {
EASY = 0,
MEDIUM = 1,
HARD = 2
} SSDifficultyLevel;
// Constants.m
int const BOOKS = 66;
Run Code Online (Sandbox Code Playgroud)
我的问题:在Constants.h中enum可以做到这一点吗?代码正在编译好(到目前为止没有警告或错误),但我想知道这是否是正确的方法,因为相关问题中提供的解决方案涉及拆分常量的定义和声明.typedef
谢谢.
首先,我已经看到了这个问题并理解为什么以下代码不起作用.那不是我的问题.
我有一个常数,它被宣布为;
//Constants.h
extern NSString * const MyConstant;
//Constants.m
NSString * const MyConstant = @"MyConstant";
Run Code Online (Sandbox Code Playgroud)
但是,在某些情况下,让常量具有更具描述性的名称更有用MyReallySpecificConstant.我希望这样做:
//SpecificConstants.h
extern NSString * const MyReallySpecificConstant;
//SpecificConstants.m
#import "Constants.h"
NSString * const MyReallySpecificConstant = MyConstant;
Run Code Online (Sandbox Code Playgroud)
显然我不能这样做(这在上面的链接问题中有解释).
我的问题是:
如何(除了类似的东西#define MyReallySpecificConstant MyConstant)我可以在多个名称下提供一个常量?
我有一个Swift应用程序,可以浏览许多视图控制器,所有视图控制器都具有相似的外观.每个视图控制器中都有按钮,我没有创建IBOutlet属性(它们都只是通过Interface Builder触发segue).
是否有一种简单的方法可以更改应用程序中所有按钮的背景颜色或文本颜色,而无需为IB中的每个按钮更改它,或为每个按钮创建IBOutlet?
我刚刚阅读了所有objective-c全局常量变量问答,但我发现它们不适合我的问题.
我需要一个像这样的变量列表:
NSString *baseURL = @"http://example.org";
NSString *mediaURL = @"http://example.org/media/";
NSString *loginURL = @"http://example.org/login/";
NSString *postURL = @"http://example.org/post/";
etc.
Run Code Online (Sandbox Code Playgroud)
当然我不能使用这段代码,因为这是一个非常糟糕的方法,如果我需要更改基本URL,我必须更改所有变量.因为我需要从应用程序的每个类访问这些变量,所以我使用这种方法将它们声明为全局:
// Constants.h
extern NSString *const baseURL;
extern NSString *const mediaURL;
extern NSString *const loginURL;
extern NSString *const postURL;
Run Code Online (Sandbox Code Playgroud)
// Constants.m
NSString *const baseURL = @"http://example.org";
NSString *const mediaURL = [NSString stringWithFormat:"%@%@", baseURL, @"/media/"];
NSString *const loginURL = [NSString stringWithFormat:"%@%@", baseURL, @"/login/"];
NSString *const postURL = [NSString stringWithFormat:"%@%@", baseURL, @"/post/"];
Run Code Online (Sandbox Code Playgroud)
但我不能这样做,因为我收到此错误:
Initializer element is not a compile-time constant …Run Code Online (Sandbox Code Playgroud) objective-c ×9
constants ×5
ios ×4
iphone ×3
c ×2
cocoa-touch ×1
nsdictionary ×1
release ×1
uibutton ×1
xcode ×1