注册 登录
主题 : OC里的全局变量到底是个啥子啊!咋这么难玩呢
级别: 圣骑士
UID: 564146
精华: 0
发帖: 579
可可豆: 2155 CB
威望: 2145 点
在线时间: 1163(时)
注册时间: 2016-05-20
最后登录: 2018-07-19
0 楼:  发表于: 2018-04-12 17:03    发自: Web Page
来源于 开发环境 分类

OC里的全局变量到底是个啥子啊!咋这么难玩呢   

大神们 我想知道这么写 为嘛不成
NSString * const a = [NSString stringWithFormat:@"%@",@"八点钟"];

这么写在一个方法内部是可以的 写在方法外部就是全局变量了 咋就不行了

背景是:工程里的所有接口 全部写在一个单独类里了
.h
UIKIT_EXTERN NSString * const LoginAPI;
.m
NSString * const LoginAPI = [NSString stringWithFormat:@"http://%@/Login",@"192.168.3.12"];

现在想把这个IP单独抽出来 发现不能实现.......
级别: 圣骑士
状态: 连续签到 - [62天]
UID: 510329
精华: 0
发帖: 504
可可豆: 816 CB
威望: 688 点
在线时间: 853(时)
注册时间: 2015-09-30
最后登录: 2018-07-19
1 楼:  发表于: 2018-04-12 17:14    发自: Web Page
不懂你想怎么样,要不你写成宏定义不就行了~
级别: 版主

状态: 连续签到 - [381天]
UID: 594651
精华: 1
发帖: 2101
可可豆: 4290 CB
威望: 3499 点
在线时间: 1038(时)
注册时间: 2016-10-20
最后登录: 2018-07-19
2 楼:  发表于: 2018-04-12 17:21    发自: Web Page
#define 宏定义不就可以。。?

级别: 新手上路
UID: 156874
精华: 0
发帖: 46
可可豆: 46 CB
威望: 46 点
在线时间: 241(时)
注册时间: 2012-07-24
最后登录: 2018-07-19
3 楼:  发表于: 2018-04-12 19:34    发自: Web Page
NSString * const LoginAPI = @"http://192.168.3.12/Login";
知其然,知其所以然
级别: 圣骑士
UID: 564146
精华: 0
发帖: 579
可可豆: 2155 CB
威望: 2145 点
在线时间: 1163(时)
注册时间: 2016-05-20
最后登录: 2018-07-19
4 楼:  发表于: 2018-04-12 19:46    发自: Web Page
回 3楼(yuzhibokaixi) 的帖子
这样写当然没问题 令人不解的是 NSString * const LoginAPI = [NSString stringWithFormat:@"http://%@/Login",@"192.168.3.12"];这么写为什么不行
级别: 新手上路
UID: 156874
精华: 0
发帖: 46
可可豆: 46 CB
威望: 46 点
在线时间: 241(时)
注册时间: 2012-07-24
最后登录: 2018-07-19
5 楼:  发表于: 2018-04-12 20:00    发自: Web Page
回 4楼(buliceli) 的帖子
[NSString stringWithFormat:@"http://%@/Login",@"192.168.3.12"];
你这玩意不是“编译时常量(compile-time constant)”,所以编译报错
知其然,知其所以然
级别: 新手上路
UID: 470840
精华: 0
发帖: 26
可可豆: 35 CB
威望: 35 点
在线时间: 203(时)
注册时间: 2015-05-08
最后登录: 2018-06-29
6 楼:  发表于: 2018-04-12 20:58    发自: Web Page
楼主你可以参考以下方法

.h
UIKIT_EXTERN NSString * const LoginAPI;
.m
NSString * const LoginAPI = @"/Login";
接下来所有API接口在使用前,统一在一个方法中拼接后使用,例如
static NSString *baseURL = @"http://192.168.3.12";
NSString *url = [NSString stringWithFormat:@"%@%@", baseURL, LoginAPI];


还可以使用NSURL的方法进行拼接
NSURL *baseURL = [NSURL URLWithString:@"http://192.168.3.12"];
[NSURL URLWithString: LoginAPI relativeToURL:baseURL];                

AFNetworking其实用的就是NSURL的拼接方法,只是又封装了一下,baseURL可以通过 AFHTTPSessionManager 的
- (instancetype)initWithBaseURL:(nullable NSURL *)url 方法传入

级别: 禁止发言
状态: 连续签到 - [2天]
UID: 520676
精华: 0
发帖: 36
可可豆: 76 CB
威望: 73 点
在线时间: 146(时)
注册时间: 2015-11-05
最后登录: 2018-07-12
7 楼:  发表于: 2018-04-13 09:08    发自: Web Page
用户被禁言,该主题自动屏蔽!
级别: 圣骑士
UID: 564146
精华: 0
发帖: 579
可可豆: 2155 CB
威望: 2145 点
在线时间: 1163(时)
注册时间: 2016-05-20
最后登录: 2018-07-19
8 楼:  发表于: 2018-04-13 10:49    发自: Web Page
回 6楼(新手很有压力) 的帖子
原来如此 怪不得折腾半天百思不得其解啊 <编译时常量>竖楼主才疏学浅
级别: 新手上路
状态: 连续签到 - [4天]
UID: 544701
精华: 0
发帖: 10
可可豆: 29 CB
威望: 21 点
在线时间: 181(时)
注册时间: 2016-02-24
最后登录: 2018-06-26
9 楼:  发表于: 2018-04-13 11:50    发自: Web Page
用宏吧  我项目中一般是在用  虽说有点拖效率
描述
快速回复

关注本帖(如果有新回复会站内信通知您)

发帖、回帖都会得到可观的积分奖励。查看论坛积分规则

按"Ctrl+Enter"直接提交
    顶部