Tag: 编程

学习Swift和iOS开发第13部分:关于版本控制

想象您正在处理一个个人应用程序项目。 您刚刚击倒了三只红牛,并且感觉(根据字面意思)生产力过高。 您逐行编写代码,开始看起来好像您正在构建的新功能已接近完成。 据您所知,由于缺乏愚蠢的测试,在3,498行附近某个地方创建了一个严重的错误,它将导致您的应用程序出现重大问题。 从那时起,您已经编写了5,000行代码! 当然,您会整夜试图找到该错误的来源。 至少你喝了那些红牛……😳 从不畏惧! 这是版本控制突袭并保存一天的地方。 现在让我们回到故事的开始:假设您正在开发一个个人应用程序项目,并为您的项目设置了版本控制。 您所做的每项重大更改都会推送到远程服务器。 您还要编写另一部分重要代码,并将其也推送到远程服务器。 这将一直持续到您多次推送代码为止。 突然,您在代码中发现一个严重的错误。 不必解析整个代码库,我们可以恢复到代码所处的先前状态。 真好 👌 关于吉特 如果您喜欢视频说明,我们专门为您准备: 在进行版本控制之前,Sam不得不以某种方式将其更新的代码文件发送给Pete。 然后,Pete将不得不识别并复制并粘贴Sam的更改到他的项目中并保存它。 然后,Pete必须将包括他的更改的更新的项目发送回Sam,以便他们俩都可以拥有当前项目: 这种情况仅发生在两个开发人员之间。 想象一下,随着更多的开发人员团队,此问题的复杂性如何增加! 版本控制的工作方式 如前所述,版本控制是一种出色的方式来备份您的代码库,并在需要时能够还原到以前的更改。 这也使与他人的合作更加轻松! 想象一下一个拥有三个开发人员的开发团队,他们分别是Jim,Sam和Harry。 他们都在开发应用程序并实现各种功能。 Jim首先编写一些代码,然后将其保存到他的项目版本中。 山姆也一样,哈利也一样。 现在,它们三个都具有相同应用程序的不同版本: 现在,Jim现在可以将其更改提交(推送)到远程服务器: 完成后,Sam可以访问远程服务器并提取Jim的更改。 版本控制会自动合并Jim对Sam项目的更改: 这两个项目现已合并。 现在,Sam可以将其独特的更改(包括Jim的更改)推回远程服务器,以便其他开发人员可以访问更新的项目: 初级开发人员Harry现在可以将项目下拉至本地计算机,进行更改并添加其功能,然后将其代码推送至远程服务器以将其合并并更新项目: 包起来 当单独工作或与团队一起工作时,版本控制显然非常有用。 它是高效的,有效的,并总体上改善了开发过程。 手动发送,合并和重新发送代码的日子已经一去不复返了。 Git是一个非常有用的学习工具。 在下一篇文章中,我们将学习Git的基础知识。

揭秘iOS应用的编码–一个完整的新手!

我只编码过一个应用,EVER,而且我不是程序员。 我的前一个职业是从事建筑设计的设计建筑师长达11年。 作为设计了大部分生命(包括uni在内的17年)的人,我看到和记住代码的方式可能与典型的程序员完全不同。 那么我怎么看代码呢? 与典型程序员的主要区别是: 我只是在开车,而不是在学习如何设计汽车。 我不了解编程的所有概念。 就像我会说广东话,但不会读或写。 对于新手编码员来说,说话就足够了。 为什么这对非编码人员有利? 关于编码,任何人都会告诉您的最重要的事情只是开始编码。 阅读教程并了解相关理论非常好,但是作为一个新手,为什么不从头开始呢? 但是,当然不是那么容易吗? 开始一些已知的事情,尤其是像编码这样令人生畏的事情,最主要的是恐惧。 只是您会学会忍受编码的恐惧。 在代码中总会有一些您不知道的东西。 这是我了解使用Objective C进行编码的一些方法,从长远来看将为您提供帮助。 目标C是一种基于对象的编程语言。 它的意思是: 就像罐中的软糖一样,您编写的每个小脚本都是一个软糖。 一些软糖具有相同的颜色,它们可能属于同一类别,即黄色与绿色软糖类别。 此描述并不完全准确,但是对于非编码人员,请暂时忘记专家的知识! 编码软糖需要3个常规步骤。 1.初始化它,2.添加属性,3.然后将它添加到某些东西中。 而已! 例如1.启动黄豆。 2.定义大小,颜色和点。 3.然后将其添加到果冻罐中。 您的第一堂课完了! 真的,那是它的主要要旨。 当您想到编码为软心豆豆时容易吗? 当然,制作1或2个软心豆糖会制作非常非常简单的程序。 但这是一个开始。 这是一些创建按钮的真实代码: UIButton * btn = [[UIButton alloc] init]; btn.frame = CGRectMake(0,0,100,100); [btn setTitle:@“我是一个软心豆粒糖” forState:UIControlStateNormal]; btn.titleLabel.font = [UIFont fontWithName:@“ SFUIText-Regular” size:15]; [jar […]

为什么我喜欢编码

println(“ H​​ello World!”) 我本周刚刚完成了另一个iOS应用的编码。 它应该在几周内进入App Store(App Store审核过程需要这么长时间)。 这是一个ABCs抽认卡应用程序,由我的一个朋友设计,他画了一些愚蠢的动物。 我用Objective-C编写了代码。 自2008年提供iPhone OS SDK(软件开发工具包)以来,我一直在编写Objective-C。我在业余时间从iTunes U的Stanford iPhone Development课中学到了东西。 在上课的同时,我在8个月内制作了自己的第一个iOS应用。 我已经为iOS应用程序编写代码大约五年了,但我仍然认为自己是一个初学者-Apple每年都会更新SDK。 今年是最大的变化-Swift。 我开始在Swift发行之日就开始编写代码,到目前为止,我还没有错过Objective-C的编码。 作为设计师,这是个好消息。 Swift看起来更漂亮,更易于理解-更少的代码编写。 在以后的文章中,我将详细介绍我在Swift方面的经验。 我的代码之旅 在学校里,我正在独自学习代码,以便能够在线展示我的作品-当时我是插图专业。 网络是新的,因此没有像Stack Overflow这样的博客或在线社区。 网络开发也太新了,不足以成为学校的课程。 我是最早学习网络开发的人之一,因此在学校提供课程时,我帮助教了我的同学。 我非常喜欢Web开发,以至于坚持不懈地改变了我的专业。 我不是程序员-我毕业于美术学士学位,重点是电子媒体(交互式设计)。 但是,我职业生涯的大部分时间都集中在前端开发上。 我为我工作的公司写了很多HTML / CSS / JavaScript。 我每天仅靠学习就能掌握自己的编码和编程技术。 我喜欢自己解决问题。 我从大学二年级(1994年)开始使用一种名为HyperCard的Apple编程工具编写代码。 HyperCard开发了许多出色的游戏,例如Myst。 我们的课堂作业包括Edutainment应用程序,作品集,Music Artist Bio等。我喜欢设计体验,设计布局,当然也喜欢编写代码。 没有代码,我的设计将无法正常工作。 当一切都组装好后,最大的感觉就来了。 看到同学们使用我的应用程序真是令人高兴。 我是第一个将视频和音频整合到课堂项目中的人-很高兴看到他们的反应。 我喜欢编写代码,因此使用我制作的产品使人们感觉良好。 通过Twitter @ArtofNor与我联系。

硬链接!=符号链接

链接是链接就是链接,对不对? 错误!!! 让我们谈谈硬链接和符号链接在Linux上的情况,它们之间的区别以及如何创建它们。 硬链接 从简单的角度来看,硬链接是一种使操作系统认为inode具有两个(或更多)名称的方法。 如果其中一个硬链接被编辑/更改,则所有关联的硬链接都将被更改。 例如,如果您有一个文件hello.c指向inode 141366中的信息,则指向文件hello.c的硬链接将指向inode 141366。 创建硬链接 创建硬链接的语法为: 在[OPTION] TARGET LINK_NAME中 TARGET =您想要与之关联的硬链接的文件 LINK_NAME =您的硬链接名称 有关shell支持的各种选项,请参见ln命令的手册页。 符号链接 最基本的符号链接是文件的快捷方式。 假设您有一个文件hello.c,它指向inode 141366中的信息。 如果创建指向文件hello.c的符号链接hello_link,则hello_link的文件会告诉操作系统查看hello.c的信息,然后该信息会告诉操作系统要查找的信息位于inode 141366中。 创建符号链接 创建硬链接的语法为: ln -s [OPTION] TARGET LINK_NAME -s = ln sommand选项以创建符号链接 TARGET =您想要与之关联的符号链接的文件 LINK_NAME =符号链接的名称 有关shell支持的各种选项,请参见ln命令的手册页。

裸机编码:将iPhone用作蓝牙面包板

(为我省去学术界,并向 我展示代码 !) 简介:该理论似乎很容易 作为序言,我应该注意,此过程依赖于其他研究人员的先前和独立工作,这些研究人员能够免费提供S5L8900应用处理器来运行任意的,未装箱的代码。 没有对系统的这种访问级别,根本不可能实现蓝牙解放。 此外,必须有可能针对ARM体系结构的C编译器,但是在那时不那么容易获得,而且绝对不在当今的开发阶段。 在完成对设备的读/写访问的艰巨工作之后,实现合理的蓝牙实现应该是小菜一碟。 好吧,应该已经。 然而; 没有AppleHostsOnly =没有设置,即使存在,也缺少大量的蓝牙堆栈。 因此理论很简单:我将重写与少量开源堆栈(例如lwBT)接口的Apple Bluetooth驱动程序代码。 很快就很明显,需要对从物理HCI查询到最终UI显示的整个事件链有一个完整的了解。 问:当您需要学习有关系统的所有知识时,您会去哪里? 答:硬件。 无论如何,进行逆向工程时最好的方法通常是实际查看正在使用的硬件。 我还没有足够的游戏能力用自己的全新iPhone 3G做到这一点,所以我把它留给了iFixit的硬件专家来解决。 他们很容易在创作共用下许可自己的工作! 因此,在逻辑板的左上方,有一个蓝牙芯片组(银色的IC),结果证明它是Cambridge Silicon Radio(CSR)BlueCore 6芯片,其数据表可以在这里找到。 从数据表中可以明显看出,BC6可以通过多种方式连接到应用处理器。 通常情况下,这些东西都是通过SPI(闪存盘)或UART(单元调制解调器)进行接线的,因此人们有很大的信心相信这种趋势会持续下去。 在软件和硬件之间的接口上,事情变得很有趣。 在/dev/uart.bluetooth处存在一个设备文件,该文件证实了怀疑该芯片是以UART空调制解调器的方式连接的。 而且,由于用户可以访问,它预示了早期iOS驱动程序的非常奇怪的体系结构。 将几个字节扔进/dev/uart.bluetooth的深渊后,奇迹般地,返回了HCI响应数据包。 快乐的时光! 软件界面 令人难以置信的是,似乎iOS在驱动用户空间中的蓝牙部分,而不是在内核模块或操作系统的其他级别上。 通过使用似乎由iOS调用以初始化各种(不同的)蓝牙芯片的两个二进制包可以看出这一点。 他们甚至拥有自己的命令行界面。 进一步的测试和对访问设备文件的二进制文件(BlueTool和csr)的分析(包括有用的带有注释的“启动”脚本),还通过直接发送和接收HCI命令,确认整个芯片在用户空间级别上得到控制。 掌握了有关HCI消息传递整个过程的更多信息,并且在这一点上,源代码可以发送任意HCI命令,逻辑上的下一步是派生源代码以进行HCI查询并观察芯片的响应(如果有)。 。 HCI查询结果:找到0个设备。 什么? 怎么会这样 答案将构成整个应用程序解决方案的基础,但是在一些阴谋论和许多深夜来临之前,还没有出现。 因此,让我们看一下拼图的各个部分。 蓝牙2.0规范概述了远程设备发现的步骤,方法是发出1)查询命令2)侦听查询结果事件(或类似消息),然后发出3)侦听查询完成事件。 但是,发出以下命令之后: TX:查询命令+ ——————————————— —————- + | 0x01 | 0x01 0x04 […]

使用FFMPEG和VideoToolbox在iOS上加速H264解码

在LIVEOP,我们致力于以简洁的方式为急救人员提供最相关的信息,同时又不影响我们的无缝用户体验。 当我们与全球领先的无线(随身)摄像头系统提供商Zepcam合作时,我们希望确保我们提供的体验符合我们的高标准,而不影响性能或效率。 Zepcam托管的摄像机流有几种不同的格式,最重要的是,HTTP Live Streaming(HLS)是iOS生态系统中的一流公民,内置了AVFoundation和RTSP(实时流协议)的内置支持。 HLS流通常用于直播电视和新闻广播。 它专注于为观看者带来无缝体验:不允许丢帧,不允许无序播放帧,并保留少量即将出现的帧缓冲区以确保流畅的播放体验。 Zepcam流被激活的情况通常会危及生命。 警员可能在试图装防暴动时从佩戴在身上的摄像机进行实时直播,或者在顶部装有摄像机的梯形引擎可能会鸟瞰大建筑物的火灾,包括消防员在地面上的位置。 我们对无缝用户体验的定义与HTTP Live Streaming所规定的不同:在我们的案例中,向用户显示的帧尽可能实时是很重要的。 它们可以无序到达,并且可以丢弃几帧,只要这有利于流的实时性。 加上我们的要求,我们开始在UDP上使用RTSP。 Apple不在任何高级框架中提供对RTSP流回放的支持。 用于回放视频流的所有高级系统类MPMoviePlayerController , AVPlayerItem和AVPlayer不支持RTSP流。 幸运的是,瑞士的音频/视频处理军刀FFMPEG配备了正确的工具来处理和解码RTSP流。 FFMPEG在开源社区已有17年的历史了,自那时起,它就已经成为VLC,Google Chrome和Chromium¹等各种最终用户应用程序背后的可靠力量。 设置FFMPEG Zepcam提供的RTSP流使用H264编解码器进行编码。 为了防止最终iOS应用程序文件(.ipa)的二进制文件大量增加,我们选择从头开始编译最新版本的FFMPEG(v4.0.1),仅启用我们希望使用的那些功能。 我们使用此处找到的出色的构建脚本,并进行了一些调整: 将FF_VERSION变量更改为4.0.1 将DEPLOYMENT_TARGET更改为iOS应用程序的部署目标 更改CONFIGURE_FLAGS以启用位码,并禁用除流所需的所有功能之外的所有功能: CONFIGURE_FLAGS =“-启用交叉编译–disable-debug –disable-programs –disable-doc –extra-cflags = -fembed-bitcode –extra-cxxflags = -fembed-bitcode –disable-ffmpeg –disable-ffprobe –disable-avdevice –disable-avfilter –disable-encoders –disable-parsers –disable-decoders –disable-protocols –disable-filters –disable-muxers –disable-bsfs –disable-indevs –disable-outdevs –disable-demuxers –enable-protocol = file […]

Metal API简介

Metal是一种低开销,高性能的API,可以在GPU上执行图形和计算工作。 GPU的常见工作是绘制几何图形,而Metal的基本设计原理旨在帮助应用程序极其快速地绘制几何图形。 在GPU上执行绘制调用即可完成绘制几何图形。 绘图调用是图形命令和状态的集合,这些命令和状态在屏幕上产生视觉效果; 每个绘制调用都需要有自己的图形状态向量,这意味着它需要明确指定用于执行绘制的着色器,图形状态,数据缓冲区,纹理和渲染目标。 在所有上一代的硬件图形API(如OpenGL ES)中,更改状态向量都是非常昂贵的操作,因为所有API命令都必须在相应的硬件命令中转换。 这样做的成本通常全部在CPU上,负责执行这种转换的函数和所有API命令必须在GPU开始执行任何工作之前进行转换。 下图显示了典型的绘制调用序列以及从应用程序(CPU端)到GPU的执行流程。 设计原理与架构 金属围绕6个关键设计原则构建: 最薄的API,意味着减少在应用程序和GPU之间执行的代码量。 旨在为所有现代GPU硬件功能提供全面支持 减少昂贵的操作频率。 提供可预测的性能。 提供对命令提交的明确控制。 针对CPU行为进行了优化。 几乎所有现代手机游戏都倾向于以特定帧速率为目标来管理CPU和GPU工作负载,大多数情况下,此目标为60帧每秒(fps),而其他时间为30 fps。 下图显示了一个游戏的常见情况,该游戏试图优化CPU和GPU的工作量以保持稳定的30 fps:CPU为某一帧准备渲染命令,而GPU在下一帧消耗这些命令。 当一切都按预期工作时,此设置可以提供完美且平衡的并行性,但这是一种理想的情况,因为在现实生活中,大多数情况下,CPU生成渲染命令的时间要比GPU消耗它们的时间长得多,因此GPU空闲了一部分帧。 再详细一点看CPU必须执行的工作,我们可以将其分为两部分:CPU执行应用程序逻辑所花费的时间和CPU准备呈现API命令所花费的时间; 通常,后者是占用大部分可用帧时间的时间。 如下图所示,CPU无法在目标帧时间内转换所有API命令,这可能会导致GPU跳过帧。 Metal尝试着重于准备渲染API命令的工作,并提供了支持以最小程度地减少它。 这实际上释放了可用于其他活动的CPU时间,并且大部分时间都将这些额外时间用于生成更多绘图调用。 为了更好地了解Metal API如何达到这种效果,重要的是要了解GPU编程为什么在CPU上如此昂贵。 主要有以下三个原因: 状态验证:应用程序每次调用呈现API时,呈现API实现都必须验证调用是否以正确的方式执行:应用程序使用正确数量和类型的参数,并且硬件上下文将在进入状态后变为有效状态。通话完成。 但是还有更多! 在调用API时,实现还必须将API状态编码为相应的硬件状态,并再次检查其他硬件状态以弄清楚如何将它们组合在一起以将全局上下文移动到新的状态。 着色器编译必须编译所有着色器的源代码才能生成GPU机器代码,这通常在运行时发生。 通常,状态和着色器代码的描述方式与硬件真正期望的不完全相同,因此,当应用程序更改某些状态时,可能会发生,必须重新编译生成的机器代码。 GPU工作提交状态和着色器代码可以请求不在GPU端驻留的资源,因此必须将它们在内存中移动到GPU可以访问它们的位置。 因为所有这些,所有游戏所做的就是将共享相似状态和资源的操作组合在一起,目的是减少工作量并提高效率,因此我们通常将此过程称为批处理命令……但批处理命令需要在服务器上运行更多逻辑CPU创建这些批次。 因此,最终结果是,在为CPU安排适当的工作量以产生可让GPU在整个帧中保持繁忙并在目标帧时间内完成所有这些工作的工作量之间,始终存在一个平衡的工作。 Metal与众不同的原因在于设计原则,因此不经常进行昂贵的操作。 在Metal之前的所有渲染API中,特别是OpenGL ES,状态验证,着色器编译和GPU工作提交,都是在绘制帧期间发生的,这使得帧时间的管理不受事物的直接控制,而不受应用程序的直接控制。 Metal支持在渲染对象创建时进行脱机着色器编译和状态验证,这使应用程序不必担心将工作提交给GPU,仅此而已。 为了更好地理解所有这些,让我们详细研究Metal API的所有对象部分。 让我们来看看所有这些: 设备 ( MTLDevice ):这是物理GPU的抽象,将消耗渲染和计算命令; 这也是在Metal中执行任何操作的首选对象,因为应用程序与之交互的所有对象都来自该对象。 命令队列 ( MTLCommandQueue ):此对象存储所有命令,并允许应用程序控制所有命令的执行顺序。 命令缓冲区 […]

漂亮的正则表达式

一个适用于iOS和macOS的简单正则表达式应用程序。 正则表达式,简体 使用简单的界面创建和测试正则表达式模式,向您显示结果的实时预览。 主题 根据您的喜好在暗色和亮色主题之间快速切换。 # 注释 支持#条注释,这些注释也在模式编辑器中以可视方式突出显示。 微调您的图案 多种选项可帮助您微调图案: 不区分大小写 -以与大小写无关的方式匹配字母。 忽略元字符 -将整个模式文本视为文字字符串。 锚点匹配行 -允许^和$匹配行的开头和结尾。 删除线 您还可以启用删除线设置,进一步使您能够轻松确定与模式匹配的文本。 拆分视图 在iOS上 ,所有尺寸和方向都完全支持Split View。

Objective-C阻止来龙去脉

注意 :此博客可作为在Objective-C块上的学习和共享经验,如果有不正确的地方,请随时发表评论。 另外,这个博客的很大一部分不是原创的,而是由我从其他博客或SO答案中挑选并验证的。 本文末尾提供了参考。 大多数iOS开发人员都处理了Objective-C块。 当您执行异步操作或要同步其他操作时,阻止功能特别有用。 那么,遮挡如何在后台工作呢? 一位同事写这个博客给我带来了麻烦。 这是一个简化的代码片段: func recreate(){ sessionDelegate.sessionDidBecomeInvalidWithError = { [弱自我]会话,发生错误 守卫让strongSelf =自我else {return} strongSelf.sessionDelegate = SessionDelegate() session.finishTasksAndInvalidate() } } 问题是:该程序会崩溃吗? 可能导致崩溃的原因是: sessionDidBecomeInvalidWithError块归sessionDelegate所有。 如果将self的sessionDelegate重新分配给新的SessionDelegate()实例,则原始委托将被释放。 那么,原始代表的阻止仍会存在吗? 根据我们的实验,答案是: 它不会崩溃 。 但为什么? 我在网上做了很多研究,以下是我在网上发现的一些声明,并试图进行验证: 默认情况下,块是Objective-C中唯一在堆栈中分配的对象。 块的大小是固定的,一旦创建了给定的块就无法对其进行修改。 块在整个执行过程中是恒定的。 每次将复制消息发送到块时,都会将其移动到堆中(如果尚未复制)。 仅用作函数或方法调用参数的块可以保留为堆栈块,但是其他任何ARC保留该块的地方都将复制该块。 当一个块不捕获变量时,它就像一个普通函数。 Clang通过使此类块成为“全局块”来实现这一点 对于iOS块的详细信息,StackOverflow有一个很好的答案,调试非常有趣。 我重做了他的实验,这是该实验的摘要。 当评估Block文字表达式时,基于堆栈的结构将按以下方式初始化: 1.静态描述符结构的声明和初始化如下: 一种。 invoke函数指针设置为一个函数,该函数将Block结构作为其第一个参数,并将其余参数(如果有)作为Block的参数,并执行Block复合语句。 b。 大小字段设置为以下块文字结构的大小。 C。 如果Block常量需要将copy_helper和dispose_helper函数指针设置为相应的助手函数。 2.创建并初始化堆栈(或全局)Block文字数据结构,如下所示: 一种。 isa字段设置为外部_NSConcreteStackBlock的地址,该地址是libSystem中提供的未初始化内存的块,或者是_NSConcreteGlobalBlock(如果这是静态或文件级的Block文字)。 b。 […]

通过这些软件和移动开发课程来建立您的职业

智能手机和设备的日益普及促使公司和企业更加专注于为大众创建更具响应性的企业。 公司不再对智能手机的功能以及它们如何改变世界消费创意的方式视而不见。 开发人员不得不效仿并开始为智能手机和平板电脑甚至现在的智能手表开发软件和应用程序。 这已经改变了软件开发的目标,并将移动开发吸引到了人们的视线中,这使其成为开发人员丰厚的职业选择。 软件开发和移动开发的招聘人数有所增加,现在他们正努力学习与移动和应用程序开发相关的最新新技术。 如果您想提高自己的技能并开始在软件和移动开发领域的职业,这里有一些Eduonix的课程,非常适合您入门。 Docker专业版:实用指南 对于正在为手机开发应用程序的任何人来说,Docker都是一项重要的技术,因为对于手机而言,尚无定论。 有不同的型号,不同的RAM,不同的操作系统,不同的版本等等。 因此,如果您想设计一个应用程序,则必须确保您的应用程序能够适应市场上的每部手机。 但是,不必为每种类型设计单独的环境,您只需使用docker包装您的软件并在不同的系统上对其进行测试,而无需重新编写所有内容。 就像本课程一样,可以节省大量时间。 在本课程中,您将学习如何从头掌握Docker,包括它是什么,什么是容器以及如何在Docker上交付和部署您的应用程序。 从头开始学习Python编程 Python是一种出色的服务器端语言,对于喜欢简单易读的代码的人来说,这是史诗般的。 Python消除了花括号的麻烦并简化了语法,从而使新手开发人员更容易理解编码范例。 这种功能强大的语言已成为移动开发中满足服务器端需求的流行语言。 本课程将教您Python的基础知识,包括编码和语法的基础知识,语言结构以及如何使用该语言进行编程。 Python 3编程开发人员指南 本课程与初学者同时工作,并以此为基础,帮助您学习最新版本的Python,即Python3。它还将教您高级概念和功能。 但是,不要着急,本课程还包括一个较新的部分,以帮助您记住Python的基本功能并帮助您建立这些原理。 初学者的Clojure基础知识 编程更聪明,而不是更难是Clojure的口头禅。 这种出色的语言已成为功能编程语言,使开发人员仅需几行代码就可以实现更多目标。 最好的部分是,插入的每个函数或代码将始终提供相同的结果,从而消除了繁琐的错误。 如果您想设计出色的软件和移动软件,Clojure是最好的语言之一。 该Clojure教程将帮助您学习Clojure的基础知识,以及如何开始使用这种惊人的语言进行编码。 使用Swift 2学习iOS应用开发 苹果产品构成了市场上大量可用的设备,尤其是随着iPhone,iPad和Apple Watch的推出。 要为此惊人的操作系统构建应用程序,您肯定需要学习Swift 2,这是一种简单但功能强大的编程语言。 本课程将帮助您学习Swift,甚至可以开始编写iOS程序。 从Xcode IDE到简单的概念(如Set,Truples和Arrays),您将掌握所有这些。 学习iOS编程建立高级项目 既然您已经了解了Xcode和Swift的基础知识,您就可以开始学习如何实际构建项目和应用程序了,这一惊人的课程将帮助您学习如何。 您将学习如何通过与讲师一起创建应用程序来真正开始构建应用程序。 您将获得经验和信心,将您所学的所有关于iOS编码的知识付诸实践,并付诸实践。 有5个主要项目,包括从在Sketch中设计应用程序到将其实际转换为代码。 终极Java开发和认证课程 Java是学习如何为软件和手机编写代码的重要组成部分,许多软件都需要Java才能创建应用程序。 您的大多数Apache框架,甚至是流行的Spring MVC框架,都需要Java编码语言来进行设计和编码。 在本Java课程中,您将获得开始使用Java编程语言进行编码所需的所有帮助。 从基本语法到更复杂的范例,甚至是多态,该课程都是满足您所有Java需求的完美解决方案。 这些只是Eduonix上提供的许多课程中的一部分。 整个网站完全致力于帮助用户成为Web开发人员。 现在,Web开发已成为一个利润丰厚的领域,许多人在此领域找到梦想的职业。 如果您有任何疑问或反馈,请在评论部分中留言,让我们知道。