Menu
Woocommerce Menu

计算周内选择的时间段是否存在重复,Carthage的使用方法【银河国际网址手机版】

0 Comment


银河国际网址手机版 1IMG_2143584E108B-1.jpeg

Carthage和CocoaPods都可以用来管理第三方库。本文的目的是记录一下Carthage的使用方法,不过为了全面一点,也加上了CocoaPods。

1、iPhone传输文件的几种方式

  1. 通过itunes传输文件到documents
  2. 通过苹果iOS11文件APP->更多->打开
  3. 客户端自定义协议下载(百度阅读先将文件上传到服务器,再下载)
  4. WiFi传书
  • 第一种:

    银河国际网址手机版 2Snip20180227_11.png

  • 第二种:

    银河国际网址手机版 3Snip20180227_12.png

  • 第三种:

    银河国际网址手机版 4Snip20180227_13.png

  • 第四种:银河国际网址手机版 5Snip20180227_14.png从图中可
    要判断时间段1是否存在时间段2,只需要判断时间开头和结尾是否存在另一个时间段中,也就是S2<S1<E2
    OR S2<E< E2,但是还存在一种情况就是图4展示的,所以还要判断
    S1<S2<E1 OR S1<E2<E1伪代码

Carthage对项目无侵入性,管理的依赖只需编译一次,并且可以与CocoaPods并存。

2、WiFi传书的原理

  • 将手机作为服务器,在同一网络下,可以用过浏览器访问到服务器,上传文件后,服务器将文件存储到沙盒内

注意:Carthage需要iOS 8+

3、技术选型

  • CocoaHTTPServer 是面向Mac OS X和iOS
    app的轻量级、可嵌入的HTTP服务器框架。
  • CocoaHTTPServer是由deusty
    designs开源的一个项目,支持异步socket,ipv4和ipv6,http
    Authentication和TLS加密
  • 浏览器上传本地书籍,使用ajax + html上传文件,表单上传的方式
 if startTime1 >= startTime2 && startTime1 <= endTime2 { return true }else if endTime1 >= startTime2 && endTime1 <= endTime2 { return true }else if startTime2 >= startTime1 && startTime2 <= endTime1 { return true }else if endTime2 > startTime1 && endTime2 <= endTime1 { return true }

1.1 安装Homebrew

4、HTTPSERVER 技术要点

- setServer { self.httpServer = [[HTTPServer alloc] init];//初始化 [self.httpServer setType:@"_http._tcp."];//通过Bonjour服务发布的类型,允许浏览器访问 [self.httpServer setPort:8080];//设置端口 [self.httpServer setConnectionClass:[MyHTTPConnection class]];//设置处理连接的自定义类文件 NSString *webPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Web"]; DDLogInfo(@"Setting document root: %@", webPath); [self.httpServer setDocumentRoot:webPath];//设置服务器根目录 NSLog(@"home = %@",NSHomeDirectory;}

- supportsMethod:(NSString *)method atPath:(NSString *)path{ HTTPLogTrace(); // Add support for POST if ([method isEqualToString:@"POST"]) { return YES; } if ([method isEqualToString:@"DELETE"]) { return YES; } if ([method isEqualToString:@"GET"]) { return YES; } return [super supportsMethod:method atPath:path];}

- (NSObject<HTTPResponse> *)httpResponseForMethod:(NSString *)method URI:(NSString *)path{ HTTPLogTrace(); if ([method isEqualToString:@"POST"] && [path isEqualToString:@"/upload.html"]) { // this method will generate response with links to uploaded file NSMutableString* filesStr = [[NSMutableString alloc] init]; for( NSString* filePath in uploadedFiles ) { //generate links [filesStr appendFormat:@"<a href=\"%@\"> %@ </a><br/>",filePath, [filePath lastPathComponent]]; } NSString* templatePath = [[config documentRoot] stringByAppendingPathComponent:@"upload.html"]; NSDictionary* replacementDict = [NSDictionary dictionaryWithObject:filesStr forKey:@"MyFiles"]; // use dynamic file response to apply our links to response template return [[HTTPDynamicFileResponse alloc] initWithFilePath:templatePath forConnection:self separator:@"%" replacementDictionary:replacementDict]; } if( [method isEqualToString:@"GET"] && [path hasPrefix:@"/upload/"] ) { // let download the uploaded files return [[HTTPFileResponse alloc] initWithFilePath: [[config documentRoot] stringByAppendingString:path] forConnection:self]; } return [super httpResponseForMethod:method URI:path];}

上次有2个part:一个是文件名,另一个是文件内容

- expectsRequestBodyFromMethod:(NSString *)method atPath:(NSString *)path{ HTTPLogTrace(); // Inform HTTP server that we expect a body to accompany a POST request if([method isEqualToString:@"POST"] && [path hasPrefix:@"/upload"]) { // here we need to make sure, boundary is set in header NSString* contentType = [request headerField:@"Content-Type"]; NSUInteger paramsSeparator = [contentType rangeOfString:@";"].location; if( NSNotFound == paramsSeparator ) { return NO; } if( paramsSeparator >= contentType.length - 1 ) { return NO; } NSString* type = [contentType substringToIndex:paramsSeparator]; if( ![type isEqualToString:@"multipart/form-data"] ) { // we expect multipart/form-data content type return NO; } // enumerate all params in content-type, and find boundary there NSArray* params = [[contentType substringFromIndex:paramsSeparator + 1] componentsSeparatedByString:@";"]; for( NSString* param in params ) { paramsSeparator = [param rangeOfString:@"="].location; if( (NSNotFound == paramsSeparator) || paramsSeparator >= param.length - 1 ) { continue; } NSString* paramName = [param substringWithRange:NSMakeRange(1, paramsSeparator-1)]; NSString* paramValue = [param substringFromIndex:paramsSeparator+1]; if( [paramName isEqualToString: @"boundary"] ) { // let's separate the boundary from content-type, to make it more handy to handle [request setHeaderField:@"boundary" value:paramValue]; } } // check if boundary specified if( nil == [request headerField:@"boundary"] ) { return NO; } return YES; } return [super expectsRequestBodyFromMethod:method atPath:path];}

- processBodyData:postDataChunk{ HTTPLogTrace(); // append data to the parser. It will invoke callbacks to let us handle // parsed data. [request appendData:postDataChunk];//post body存储 [parser appendData:postDataChunk];//文件存储}

接下来说说如何判断星期内如何重叠,其实道理是一样的,只是拉长了时间段

到下面这个网站安装Homebrew

如下图:银河国际网址手机版 6Snip20180227_15.png其实可以把每个时间段分割开来

https://brew.sh/index_zh-cn

每分钟60秒每小时3600秒每天86400秒周日~周一这段时间S=0 E=86400周一~周二
S=86400 E=2 * 86400以此类推

或者直接在终端输入下面的指令

银河国际网址手机版 7Snip20180227_18.png那么我们就是能知道上图的时间1的时间理解为:S
= 1 * 86400 + 开始时间E = 1 * 86400 + 结束时间 + 86400时间2的时间为:

$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

S = 3 * 86400 + 开始时间E = 3 * 86400 + 结束时间 +
86400这样就能计算出时间段在一周内的范围

1.2 更新Homebrew到最新版本

如下图

$ brew update

银河国际网址手机版 8Snip20180227_19.png这种情况,我们也可以进行切分,分成图中的前段时间和后段时间首先判断是否超过本周因为我们将每周分割成了7段,每段86400那么只要结束时间超过了7*86400,我们就可以定义为周日的时间前段时间:S
= 6 * 86400 + 开始时间E = 7 * 86400后段时间:S = 0E = 结束时间 – 7 *
86400这样就获取到了两个时间段虽然不难,也希望对有相同需求的朋友们有所帮助github地址:

1.3 安装Carthage

$ brew install carthage

1.4 查看Carthage版本号查看版本的同时,也可以验证是否安装成功

$ carthage version

2.1 终端cd到项目所在文件夹

2.2 创建Carthage文件Cartfile

$ touch cartfile

银河国际网址手机版 9创建Cartfile

2.3
编辑Cartfile并保存(可以使用Sublime进行编辑)例如导入Alamofire,就在文件中写入github
“Alamofire/Alamofire” ~> 4.7,如下图所示。

银河国际网址手机版 10编辑Cartfile

2.4 开始导入

$ carthage update --platform iOS

成功之后文件夹的结构会变为下图这样。

银河国际网址手机版 11

注意:如果build文件夹中没有.framework文件,可以到Xcode的Preferences的Locations中,做下图这样的设置。

银河国际网址手机版 12

2.5 把.framework文件导入项目

下面三张图展示了添加过程。

项目名称 –> TARGETS –> General –> Linked Frameworks and
Libraries -> Add Other… –>
选择Carthage/Build/iOS/Alamofire.framework文件 –> 导入成功

银河国际网址手机版 132.5.1银河国际网址手机版 142.5.2银河国际网址手机版 152.5.3

标签:

发表评论

电子邮件地址不会被公开。 必填项已用*标注

相关文章

网站地图xml地图