Ios 目标C宏附加到字符串
我认为这是一件非常简单的事情,但由于我对iOS开发和objective C还不熟悉,所以我无法理解Ios 目标C宏附加到字符串,ios,objective-c,Ios,Objective C,我认为这是一件非常简单的事情,但由于我对iOS开发和objective C还不熟悉,所以我无法理解 #define RESTFUL_PATH_PREFIX @"https://gogch.com/gch-restful"; #define LOGIN RESTFUL_PATH_PREFIX @"/login; 我想要结果“https://gogch.com/gch-restful/login“ 但我得到的结果是”https://gogch.com/gch-restful“ stackoverf
#define RESTFUL_PATH_PREFIX @"https://gogch.com/gch-restful";
#define LOGIN RESTFUL_PATH_PREFIX @"/login;
我想要结果“https://gogch.com/gch-restful/login“
但我得到的结果是”https://gogch.com/gch-restful“
stackoverflow中的其他主题只提到在字符串开头添加新字符串,如
#define DOMAIN "example.com"
#define SUBDOMAIN "test." DOMAIN
删除尾随分号:
#define RESTFUL_PATH_PREFIX @"https://gogch.com/gch-restful";
^
然后,编译器可以连接字符串常量:
@"first" @"second"
而不是:
@"first"; @"second"
删除尾随分号:
#define RESTFUL_PATH_PREFIX @"https://gogch.com/gch-restful";
^
然后,编译器可以连接字符串常量:
@"first" @"second"
而不是:
@"first"; @"second"
更好的做法是使用常量而不是定义宏
static NSString *const YourPath = @"https://...";
然后可以使用
nsstringwithformat:
方法连接字符串。使用常量而不是定义宏是更好的做法
static NSString *const YourPath = @"https://...";
然后,您可以将字符串与NSString stringWithFormat:
方法连接起来。既然我对一个标记为重复的问题做了这个回答,我也将在这里回答它
当然,您可以使用defines或NSString常量。这真的是一个偏好的问题。。。然而,我以前看到过使用
#define
和NSString const*const
。定义更容易,而且你可能不会通过使用常量而不是到处都是NSString
的单个不可变实例来节省那么多的内存
一些建议是考虑如何导出NSString
常量。您可能希望使用EXTERN\u PRIVATE
而不是EXTERN
,但我的示例代码将允许标头的所有客户端读取您在其中声明的字符串常量
您可以做什么:
常数.h
main.m
#导入
#导入“constants.h”
int main(int argc,const char*argv[]{
@自动释放池{
NSLog(@“常量值:%@”,devBaseUrl);
//打印:常量值:http://127.0.0.1:8000/
}
返回0;
}
既然我对一个标记为重复的问题做出了回答,我也将在这里回答它
当然,您可以使用defines或NSString常量。这真的是一个偏好的问题。。。然而,我以前看到过使用
#define
和NSString const*const
。定义更容易,而且你可能不会通过使用常量而不是到处都是NSString
的单个不可变实例来节省那么多的内存
一些建议是考虑如何导出NSString
常量。您可能希望使用EXTERN\u PRIVATE
而不是EXTERN
,但我的示例代码将允许标头的所有客户端读取您在其中声明的字符串常量
您可以做什么:
常数.h
main.m
#导入
#导入“constants.h”
int main(int argc,const char*argv[]{
@自动释放池{
NSLog(@“常量值:%@”,devBaseUrl);
//打印:常量值:http://127.0.0.1:8000/
}
返回0;
}
@dropy您可以从类型安全中获益。这不是真的;编译器将很快告诉您是否尝试连接字符串和非字符串类型。@Droppy您是对的。这就解释了为什么它更好,并不是说每一句话都“更好”,而是更具声明性。值得一提的是,我使用了两种范式的框架。经验法则:做框架做的事情。如果你正在创建一个新的框架,选择一个范例并坚持下去。您将获得更多带有常量的调试功能。。。这就是我所能想到的。@Droppy你可以从类型安全中获益。那不是真的;编译器将很快告诉您是否尝试连接字符串和非字符串类型。@Droppy您是对的。这就解释了为什么它更好,并不是说每一句话都“更好”,而是更具声明性。值得一提的是,我使用了两种范式的框架。经验法则:做框架做的事情。如果你正在创建一个新的框架,选择一个范例并坚持下去。您将获得更多带有常量的调试功能。。。这就是我所能想到的。