服务器端Swift基础-压缩目录

只需花几分钟的时间,就可以避免通过HTTP发送文件的麻烦,让我们看一下如何获取目录,并使用Swift在服务器上将其压缩。 我将向您展示如何以隔离的方式执行此操作,但是如果您有现有的Swift服务器应用程序,则可以轻松地将其添加到现有的代码库中。 因此,让我们从一个基本的swift应用开始,其中没有任何内容。 mkdir ziptest cd ziptest 快速包初始化 首先,在该新目录中,创建一个要压缩的新目录,并在其中放置一个随机文本文件: 接下来,让我们将库添加到Package.swift文件中。 添加到依赖项数组: .Package(网址:“ https://github.com/PerfectlySoft/Perfect-Zip.git”,majorVersion:2) 确定,因此将ziptests.swift重命名为main.swift(以便将其识别为可执行文件),然后打开并删除占位符内容。 我们在这里只需要几件事: 导入PerfectZip // zip对象 让zippy = Zip() //将文件压缩到源目录中, //放入目标文件,覆盖所有现有文件。 let zipResult = zippy.zipFiles(路径:[“ ../randomzip”],zipFilePath:“ ./randomzip.zip”,覆盖:true,密码:“”) // ZipResult包含带有操作结果的枚举。 打印(zipResult == .ZipSuccess,zipResult.description) 现在让我们执行我们的小应用程序: “ swift build” ,然后“ .build / debug / ziptests” 现在,解压缩几乎完全相同: //实例化zip对象 让unZippy = Zip() //将文件解压缩到目标目录,启用覆盖 让UnZipResult = unZippy.unzipFile(源:“ ./randomzip.zip”,目标:“ ./randomzip2”,覆盖:true) […]

快速Swift技巧I

字典作为一线开关/盒 从技术上讲,您可以使用字典将switch case块重写为一行。 首先,创建一个字典,其中每个对都将大小写条件作为键,并将其对应的返回值作为值。 最后,由于字典在运行时可能有也可能没有键,因此我们使用nil合并运算符来处理默认情况。 例如,看看我们如何转换开关盒并返回带有其IndexPath的单元格高度: 自然,这种类型的重写将取决于您先前的逻辑有多复杂。 另外,请记住,并非总是单衬板是最佳选择。 您应该始终优先考虑代码的可读性。 但是,拥有另一种选择总是很好。 可变参数 可变参数是函数参数,其行为类似于常量数组,但在调用时以不同的方式表示。 代替使用数组符号,传递的元素用逗号分隔。 如果要使用这些参数构建自己的函数,只需声明参数的类型,后跟3个点。 例如,查看以下简单的UIView扩展以在单个调用中添加多个子视图: 在这里,我们可以根据需要传递尽可能多的参数。 但是,每个函数只能有一个可变参数。

iOS开发基础:变量2,常量,集合

因此,上一次,您在Swift中创建了第一个程序(恭喜got),并且了解了什么是变量以及如何使用它。 今天,我将向您解释我们知道哪些变量,什么是常量以及我们如何使用它们。 首先让我们谈谈变量和常量之间的区别。 简而言之:变量可以更改或更好,可以更改而常量不可以。 当您要存储可以更改的消息(例如上次)时,可以使用变量,因此不需要很多不同的变量,只需为其分配一个新值即可。 你知道怎么做对吗? 无论如何,为了安全起见,让我们再次看一下。 var message =“某些消息。” 简单的东西吧? 右🙂 但是,当您要存储值并保护其不被更改时,您会怎么做。 假设您要存储一个日期,例如生日。 在这种情况下,您可以使用一个常数。 要声明一个常量,可以使用let (对于变量,请使用var )一词,它看起来像这样: let Birthday =“ 1990年8月1日” 现在,您创建了一个不可改变的常量。 如果尝试为它分配这样的值: 生日=“ 1989年5月23日” 它将返回错误消息:“无法分配值:“生日”是“ let”常量。 也许您在问自己,但是如果var“更好”,为什么我们需要这个,这取决于情况。 稍后您会看到有时保护一些数据不被写入会更好,这就是为什么要使用常量的原因。 好的,现在我们把这部分弄清楚了,让我们看看我们知道哪种类型 。 种类 串 您已经知道什么是字符串 ,您之前使用过吗? 所有用双引号引起来的值的变量都称为字符串 。 如您所知,字符串可用于保存文本数据。 字符串可以被修改,转换并可以保存许多类型的值。 例如,您可以使用+运算符连接多个字符串: 让名称=“杰克” 让姓=“迈克尔斯” 让生日=“ 1700年1月10日” 哇,这家伙老了😀 那么,如何才能将他们团结在一起? 像这样: 让combinedString =“你好,我的名字是” +名字+“” +姓氏+“,我出生于” +生日 这将打印出来(稍后我们将进行介绍): “你好,我叫杰克·迈克尔斯,我在1700年1月10日感到无聊。” […]

Swift 3.0为C#开发人员解释

编程语言提供了一种通过符号指令与计算机进行通信的方法。Swift和C#是高级语言,通常归类于多范式和编译型编程语言。 它们不仅属于同一类编程语言,而且具有许多共同的语法功能。由于这种语法相似性,C#开发人员可以轻松地将Swift编程语言用于iOS,macOS,watchOS,tvOS和Linux开发。我们将精确地介绍C#和Swift之间的关键相似之处, 常量和变量 类和对象 继承(类和协议) 关闭 泛型 和其他主要的Swift功能 您可以在IBM Swift Sandbox中试用swift代码段,该工具使任何人都可以从其浏览器编写和运行Swift代码。 const是let,而var仍然是var 常量是一个标识符,其值在程序正常执行期间无法修改。 在C#中,使用关键字const定义常量,并且定义常量的语法为 const {Type} {ConstantName} =值; const int loginAttempts = 3; 在Swift中,使用let定义常量,并且明确定义类型是可选的,因为它根据通过类型推断提供的“值”来选择数据类型。 让{ConstantName}:{Type} =值 让loginAttempts = 3 让loginAttempts:Int = 3 在Swift中,每个语句末尾的分号(;)是可选的。 但是,如果要在一行上编写多个单独的语句,则需要分号。 让loginAttempts = 3; 打印(登录尝试) 注意:在C#中,定义常量符号时,其值必须在编译时即可确定。 而在Swift中,常量的值不需要在编译时就知道,而是必须在定义了显式类型的情况下将其值精确分配一次。 与C#相似, var是在Swift中定义变量的关键字。 // C#-隐式键入局部变量 var name =“ Sagar”; //迅速 var name =“ Sagar” var name:String […]

Google TEZ帐户接管

由于我严格的日程安排,我的氛围已解决了这一问题。 我已经很长时间没有发布关于我的发现了。 我没有像以前那样做过漏洞赏金活动,但是这仍然是我最近向Google报告的发现之一。 产品名称:GOOGLE TEZ 该漏洞位于该应用的ios版本中,该版本未在登录过程中实施速率限制。 重现步骤: 1.打开Goog​​le tez应用程序链接:https://itunes.apple.com/in/app/tez-a-payments-app-by-google/id1193357041?mt=8 2.输入电话号码 3.它将otp发送到该号码 4.继续输入错误的OTP。 OTP不会过期。Ypu可以使用burp入侵者或其他任何工具。 浏览器/操作系统:IOS 11 出于POC目的,我编写了一个小的frida脚本来使其自动化。 不幸的是,它被标记为重复。 活动时间表 2017年10月20日 -提交给Google安全团队的报告 2017年10月21日 -Google确认并确认了此问题,并将其发送给相应的产品小组进行调查 2017年10月23日 -Google确认该问题重复 2017年10月25日 -Google修复了该错误并推出了该补丁。 PS:敬请期待。 我已经报告了CYLANCE和nxt-gen产品中的一些有趣的错误。

在Swift中转义和不转义闭包

对于那些使用闭包的人,您可能会遇到@escaping或@nonescaping。 这他妈到底是什么? 为了理解这两个概念,让我们刷新记忆,看看根据Apple文档的闭包。 闭包是可以独立传递的功能块,可以在代码中传递和使用。 无漏封 非逃避封闭的生命周期 将闭包传递给函数 该函数执行该关闭 函数返回 基本上,非转义的闭包只能运行其主体内部的内容,而不能使用其外部的任何内容。 非转义闭包告诉编译器,您传入的闭包将在该函数的主体内执行,而在其他任何地方都不会执行。 函数结束时,闭包将不再存在于内存中。 例如,如果我们需要提取闭包内的任何值以在其外部使用,则我们可能不这样做。 在Swift的早期,默认情况下会关闭转义参数。 由于更好的内存管理和优化,Swift将所有闭包默认更改为不转义。 varclosuresArray:[()->无效] = [] func doClosures(completion:()-> Void){ completeHandlers.append(完成) } //错误!!! 将非转义参数“ completion”传递给需要@转义闭包的函数 这是一个非转义闭包的示例。 在这里,我们有一个空的闭包数组和一个包含闭包的函数。 如果要将函数中的闭包附加到闭包数组,则不能这样做,因为默认情况下它是非转义符。 Xcode的一大优点是您将需要一个转义的闭包并可以为您实现它。 逃逸关闭 本质上,转义的闭包与非转义的闭包相反。 逸出的闭包使闭包具有超过该功能的能力,并且可以存储在其他位置。 通过使用转义闭包,闭包将一直存在于内存中,直到执行完所有内容为止。 要实现转义闭包,我们要做的就是将@escaping放在闭包前面。 如果您不确定关闭是否需要转义,就不用担心,就像我在编译器足够聪明地告诉您之前所说的那样。 当我们需要实现转义闭包时,有几种方法。 一种情况是使用异步执行。 当我们处理调度队列时,该队列将为您保留关闭,而当队列完成其工作后,它将返回到关闭并完成它。 由于调度队列不在范围内,因此我们需要使用转义闭包。 另一个例子是,当我们需要将闭包存储到全局变量,属性或函数之后的任何存储中。

AC — Swift和IOS —用户通知

在iOS 10中新加入UserNotifications框架,称为iOS SDK发展到现在的最大规模的一次重组。新版本里通知的相关功能被提取到了单独的框架,通知也不再区分类型,而有了更统一的行为。 权限申请 通知权限 加入UserNotifications框架 导入用户通知 向用户申请通知权限 func application(_ application:UIApplication,didFinishLaunchingWithOptions launchOptions:[UIApplicationLaunchOptionsKey:Any]?)->布尔{ //应用程序启动后进行自定义的替代点。 // 1.我们利用UNUserNotificationCenter.current()获得UNUserNotificationCenter物件,然后再调用它的requestAuthorization(options:completionHandler :),征求使用者同意App发送通知。 // 2. options:设定我们希望使用者同意的通知样式。 UNUserNotificationCenter.current()。requestAuthorization(选项:[。alert,.sound,.badge],completionHandler:{(已授予:Bool,错误:Error?)->无效 如果授予== true { print(“使用者同意了!”) }其他{ print(“使用者不同意…”) } }) 返回真 } 要注意的是,询问消息只会出现一次,一旦用户拒绝了这个请求,当我们下次启动App时,再也看不到它。想要应用有机会接收到通知的话,用户必须从设定App进入App的通知设定页面,打开Allow Notifications的开关。 远程通知 一旦用户同意后,就可以在应用中发送本地通知了。不过要通过服务器发送远程通知的话,还需要多一个获取用户token的操作。server再使用这个token将用向Apple Push Notification的server提交请求,然后APNs通过令牌识别设备和应用,将通知推给用户。 使用UIApplication的registerForRemoteNotification来注册远程通知; 在application(_:didRegisterForRemoteNotificationsWithDeviceToken)中获取用户令牌。 // application(_: didFinishLaunchingWithOptions )中,註冊遠程通知 application.registerForRemoteNotifications() func application(_ application:UIApplication,didRegisterForRemoteNotificationsWithDeviceToken deviceToken:Data){ // deviceToken是一个Data类型,为了方便使用和传递,一般会选择将其转换为一个字符串。 print(“ DeviceToken:\(deviceToken)”) 让apnsToken = String(格式:“%@”,deviceToken为CVarArg)作为String print(“ […]

iOS Swift:MVP架构

苹果公司采用MVC作为iOS的官方架构模式。 哪里: view:是一个xib文件(或UIView子类)。 Controller:UIViewController子类,该子类从视图接收动作和事件并对其进行更新。 和Models:这是数据的表示形式。 有问题的: MVC最初打算将应用程序组件分布在不同的部分中。 但通常结果是: 缺乏分配 :控制器最终完成了所有工作。 从处理用户交互到设置视图。 进行网络调用,数据解析等等…… 这也称为Massive View Controller。 测试覆盖率低 :除了违反单一责任原则。 控制器与视图生命周期紧密相连。 测试视图控制器成为一项艰巨的任务。 MVP作为替代: 然后,MVP体系结构可以改善这种情况。 通过添加主要组件Presenter 。 稍等一下 ! 我知道这看起来像MVC,但有一个关键的区别: 现在, viewController被视为一个view 。 这意味着它将仅包含与视图相关的代码,仅此而已。 并且所有逻辑都将在演示者中实现。 然后,组件说明如下: 视图 :现在,视图既包含视图又包含视图控制器,以及所有UI设置和事件。 演示者 :演示者将负责所有逻辑,包括响应用户操作和更新UI(通过委托)。 最重要的是,我们的演示者将不会依赖UIKit 。 意味着隔离良好,因此易于测试 模型 :模型角色将完全相同 请务必注意, MVP使用被动视图模式 。 这意味着所有操作都将转发给演示者。 这将使用委托触发ui更新。 因此该视图将仅传递动作并收听演示者更新。 别再说话了。 让我们弄脏双手! 让我们快速创建一个单页项目,我想你知道怎么做know 然后,我们将创建模型。 一个简单的结构称为Traffic Light,它具有两个属性。 一个用于颜色名称,另一个用于描述其交通状况。 最后是我们的traficViewController […]

AngularJS – MVC架构– Shubham Nirmal

AngularJS – MVC架构 Model View Controller或MVC(通常称为MVC)是用于开发Web应用程序的软件设计模式。 Model View Controller模式由以下三个部分组成- 模型-这是负责维护数据的模式的最低级别。 视图-它负责向用户显示全部或部分数据。 控制器-这是一个软件代码,用于控制模型和视图之间的交互。 MVC之所以受欢迎是因为它将应用程序逻辑与用户界面层隔离开来,并支持关注点分离。 控制器接收对应用程序的所有请求,然后与模型一起使用,以准备视图所需的任何数据。 然后,视图使用控制器准备的数据来生成最终的可显示响应。 MVC抽象可以如下图形表示。 该模型 该模型负责管理应用程序数据。 它响应来自视图的请求以及来自控制器的指令以进行自我更新。 风景 特定格式的数据表示,由控制器决定呈现数据触发。 它们是基于脚本的模板系统,例如JSP,ASP,PHP,并且非常易于与AJAX技术集成。 控制器 控制器响应用户输入并在数据模型对象上执行交互。 控制器接收输入,对其进行验证,然后执行修改数据模型状态的业务操作。

iOS上的可选只读多行文本字段

在使用iOS移动应用程序时,我遇到了一项业务需求,即允许用户从长文本字段复制部分数据,而又不让他修改内容。 这是我要实现的目标 这是我使用UITextView 该解决方案包括三个简单步骤: 阻止文本编辑但保留文本选择 2.让UITextView调整其高度以适合所有内容 3.删除UITextView文本填充,使其看起来更像UILabel 查看有关如何在本机Android和Xamarin.Forms上实现此行为的相关文章。