* [ios] add config for componentWithName
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/b2d38557 Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/b2d38557 Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/b2d38557 Branch: refs/heads/0.12-dev Commit: b2d38557969853b34e4b803ea2aba7a02500d4b3 Parents: e433321 Author: acton393 <zhangxing610...@gmail.com> Authored: Tue Apr 18 11:09:31 2017 +0800 Committer: acton393 <zhangxing610...@gmail.com> Committed: Tue Apr 18 11:09:31 2017 +0800 ---------------------------------------------------------------------- .../Sources/Handler/WXConfigDefaultImpl.h | 26 ++++++++++ .../Sources/Handler/WXConfigDefaultImpl.m | 54 ++++++++++++++++++++ .../Sources/Manager/WXComponentFactory.m | 7 +++ .../WeexSDK/Sources/Protocol/WXConfigProtocol.h | 27 ++++++++++ 4 files changed, 114 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b2d38557/ios/sdk/WeexSDK/Sources/Handler/WXConfigDefaultImpl.h ---------------------------------------------------------------------- diff --git a/ios/sdk/WeexSDK/Sources/Handler/WXConfigDefaultImpl.h b/ios/sdk/WeexSDK/Sources/Handler/WXConfigDefaultImpl.h new file mode 100644 index 0000000..ccd7280 --- /dev/null +++ b/ios/sdk/WeexSDK/Sources/Handler/WXConfigDefaultImpl.h @@ -0,0 +1,26 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +#import <Foundation/Foundation.h> + +#import "WXConfigProtocol.h" + +@interface WXConfigDefaultImpl : NSObject<WXConfigProtocol> + +@end http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b2d38557/ios/sdk/WeexSDK/Sources/Handler/WXConfigDefaultImpl.m ---------------------------------------------------------------------- diff --git a/ios/sdk/WeexSDK/Sources/Handler/WXConfigDefaultImpl.m b/ios/sdk/WeexSDK/Sources/Handler/WXConfigDefaultImpl.m new file mode 100644 index 0000000..1d2ebf5 --- /dev/null +++ b/ios/sdk/WeexSDK/Sources/Handler/WXConfigDefaultImpl.m @@ -0,0 +1,54 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +#import "WXConfigDefaultImpl.h" +#import "WXThreadSafeMutableDictionary.h" +#import "WXUtility.h" + +@interface WXConfigDefaultImpl() +@property(nonatomic, strong) WXThreadSafeMutableDictionary* configDic; +@end +@implementation WXConfigDefaultImpl + +- (instancetype)init +{ + if (self = [super init]) { + _configDic = [WXThreadSafeMutableDictionary new]; + } + + return self; +} + +- (void)setClassWithName:(Class)className name:(NSString *)name +{ + if (![WXUtility isBlankString:name] && className) { + [_configDic setObject:className forKey:name]; + } +} + +- (Class)classWithName:(NSString *)name +{ + if (![WXUtility isBlankString:name]) { + return [_configDic objectForKey:name]; + } + + return nil; +} + +@end http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b2d38557/ios/sdk/WeexSDK/Sources/Manager/WXComponentFactory.m ---------------------------------------------------------------------- diff --git a/ios/sdk/WeexSDK/Sources/Manager/WXComponentFactory.m b/ios/sdk/WeexSDK/Sources/Manager/WXComponentFactory.m index aa79bad..7589dfe 100644 --- a/ios/sdk/WeexSDK/Sources/Manager/WXComponentFactory.m +++ b/ios/sdk/WeexSDK/Sources/Manager/WXComponentFactory.m @@ -21,6 +21,8 @@ #import "WXAssert.h" #import "WXLog.h" #import "WXInvocationConfig.h" +#import "WXHandlerFactory.h" +#import "WXConfigProtocol.h" #import <objc/runtime.h> @@ -189,6 +191,11 @@ if(!config || !config.clazz) { return nil; } + id<WXConfigProtocol> configHandler = [WXHandlerFactory handlerForProtocol:NSProtocolFromString(@"WXConfigProtocol")]; + + if ([configHandler respondsToSelector:@selector(classWithName:)]) { + return [configHandler classWithName:name]; + } return NSClassFromString(config.clazz); } http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b2d38557/ios/sdk/WeexSDK/Sources/Protocol/WXConfigProtocol.h ---------------------------------------------------------------------- diff --git a/ios/sdk/WeexSDK/Sources/Protocol/WXConfigProtocol.h b/ios/sdk/WeexSDK/Sources/Protocol/WXConfigProtocol.h new file mode 100644 index 0000000..a4a9e93 --- /dev/null +++ b/ios/sdk/WeexSDK/Sources/Protocol/WXConfigProtocol.h @@ -0,0 +1,27 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +@protocol WXConfigProtocol <NSObject> + +@optional + +- (Class)classWithName:(NSString*)name; +- (void)setClassWithName:(Class)className name:(NSString*)name; + +@end