核心数据,模型型号为nesneleriniyönetmek,编号为kullandığınızbirçerçevedir。 核心数据genellikle,模型模型50 ila 70oranındaazalır。yazdığınızkodmiktarınınyüzde。 Birkaçgözeçarpanyerleşiközelliğivardır:veri izlemedeğişikliği,veriyi geri alma ve tekrarlama,filtreleme,diske kaydetme gibi。 哈迪(Hadi Deneyelim)! Xcode的单一视图应用程序iPhone应用程序。 在核心数据列表中查看核心数据: 核心数据kullan kutusunuişaretlediğinizde,Xcode,AppDelegate.swiftuygulamasında 核心数据堆栈 olarak bilinenşeylerintamamlayıcıkodunuoluşturacaktır。 核心数据堆栈 ,核心数据 ,从bilgi kaydetmek到almakiçinkullanılanbirtakımnesnelerden发行。 Bunuyaptıktan声音.xcdatamodeledadlıbir dosyaadıgöreceksinizTıklayın,实体ve属性göreceksiniz。 Burada待办事项清单任务实体的名称和任务实体描述属性的名称。 她的Entity’yekarşılıkbir NSManagedObject tipindekarşılıkgelen otomatik olarak birsınıfoluşur。 NSManagedObjectÇekirdekVeri modeli nesnesinin gerekli olantümtemeldavranışlarınıuygulayan通用birsınıfdır。 Görevlerieklemekiçinstoaryboard’daekranlarımıyapalım。 ViewController’dagörevlerimizilisteliyeceğizAddTaskViewController’dadagörevlerimiziekleyebileceğimizbir ekranoluşturduk。 AddTaskViewController ikinci viewcontroller’da verilerini kaydetmeyebaşlayalım。 数据仓库erişebilmeliyiz。 AppDelegate.swiftüzerinetıklarsanız,专业知识核心数据ilililiyöntemleriveözellikleriöncedenoluşturulduğunugöreceksiniz。 Dolayısıyla,tekyapmamızgereken buyöntemleriveözelliklerikullanmaktır。 NSPersistentContainer或其他数据集。 Şimdigörevekledğimizbuttonun cilickolayınıyazalımve girilengörevtanımınıTask’ımınızıniçinekayıtedelim。 […]
SSMP或“第二屏幕模式协议”是一种轻量级框架,允许用户按应用程序将其设备用作桌面。 只需将您的设备连接到显示器,该设备就会变成键盘和触控板,并且您有了台式机。 最好的是,它只需要最少两行代码。 这个框架是我创建的,并且是100%开放源代码。 该项目在Swift中。 克隆GitHub存储库并构建框架 从发行版下载框架 使用迦太基(推荐) 椰子足 如果您不使用Cocoapods,或者只想查看仓库,请单击此处。 今天,我们将与Cocoapods一起安装它。 您要安装Cocoapods,请单击此处。 如果还没有,请创建一个Xcode项目。 项目准备就绪后,将其关闭并转到其文件夹。 现在打开终端并输入以下内容(记住在每个命令后按回车键): cd PathToYourProject pod初始化 纳米Podfile 在Pods for ” your project”下方,添加: 豆荚“ SSMP” 按control-X Y enter 。 那应该使您回到正常的命令行中。 对于最后的步骤,键入: 吊舱安装 这将安装所有pod并创建一个xcworkspace ,您将从现在开始使用它而不是xcproj 。 您可能需要按CMD+B来重建项目。 最后,让我们开始编码。 在您的AppDelegate.swift ,导入SSMP 。 然后转到didFinishLaunchingWithOptions并设置您希望外部显示器具有的视图控制器: SSMPApp.default.viewController = MyViewController() 如果使用情节提要,请执行以下操作: 让故事板:UIStoryboard = UIStoryboard(名称:“ Main”,包:nil) 让VC = storyboard.initiateInitialViewController() SSMPApp.default.viewController = […]
使用Pring开发iOS应用 本文是针对尚未在Firebase上进行开发的开发人员的。 我将尽可能详细地解释这项工作,以便Android开发人员和Web开发人员可以立即开始。 https://github.com/1amageek/Pring 开发环境 macOS High Sierra Xcode 9.4 斯威夫特4 iOS 11 创建一个Xcode项目并准备Firebase 让我们创建一个新的Xcode项目 首先,启动Xcode。 让我们做一个新项目。 在这里,选择Master-Detail App。 请在产品名称中输入项目的名称。 我命名为Firebase Sample。 这是非常重要的,因为捆绑包标识符是从组织标识符生成的。 如果您有域,请使用它。 请关闭一次Xcode项目。 使用Cocoapods安装Firebase SDK 请使用Terminal移至项目目录。 在项目目录中执行以下命令。 荚初始化 如果生成Podfile ,则表示成功。 如果遇到错误,请安装Cocoapods。 https://cocoapods.org/ 编辑您的Podfile 平台:ios,“ 11.0” 目标“ Firebase示例” use_frameworks! 吊舱“ Pring” 结束 保存您的Podfile并执行以下命令 吊舱安装 如果显示如下,则表示成功。 更多文件将添加到项目目录。 创建一个名为Firebase Sample.xcworkspace的文件。 打开这个 请确认Pods已添加到项目中,如下所示。 Firebase SDK安装到此结束。 准备Firebase 我安装了Firebase […]
我当时正在开发用于导航和跟踪解决方案的中等规模的iOS。 该应用程序是使用SWIFT 4中的XCode 9针对通用设备开发的。 问题背景: 该应用程序在收到一些远程通知后突然表现异常怪异。 由于此应用程序属于跟踪和导航类别,因此严重依赖于后台更新。 为此,我们使用MQTT,Firebase和APNS来进行通信,如果任何通信机制失败,应用程序将立即以零时间转移到其他更新机制。 当我们的项目进入回归测试阶段时,我们的另一种信息更新机制报告失败。 具有挑战性的解决方案: 经过大量的研发和深入研究该问题,我们认为该问题与远程通知没有直接联系。 苹果在iOS 10 SDK中的UNUserNotificationCenter中进行了一些更改。 Apple确实将远程通知和本地通知合并在一个框架“ UNUserNotificationCenter ”中。 因此,当应用程序运行时,它会处理“远程”通知,我们通过将消息通过本地通知委派给用户来通知用户。 通过广泛使用本地通知,iPhone SDK可以静默停止处理远程和本地通知。 在这一点上,我们的工程师具有多个方面来检测应用程序的故障并引起对实际问题的困惑,并将工程师转移到其他方面,例如后台任务处理,多线程,Web服务问题等。 但是实际的原因是是其文档中所写的违反Apple开发准则的行为 : “可以安排通知请求,以通过时间和位置通知用户。 有关更多信息,请参见UNNotificationTrigger。 调用-addNotificationRequest:将使用相同的标识符替换现有的通知请求。 标识符为现有交付通知的通知请求将为新的通知请求发出警报,并在触发时替换现有交付通知。 应用程序可以在任何时候调度的待处理通知请求的数量受到系统的限制 。” 实际上,这种趋向于权衡的业务逻辑实现是我们最不优先考虑的。 因此,我们必须发明一种不会破坏客户业务的新解决方案。 实施: 通常,我们处理远程通知并将其传输到本地通知以在设备上显示。 //创建远程通知请求 let request = UNNotificationRequest(标识符:requestIdentifier,内容:内容,触发器:触发器) //将远程通知发布到UNUserNotificationCenter框架 UNUserNotificationCenter.current()。add(request,withCompletionHandler:{(错误)在 logsManager.error(“显示本地通知错误”,错误为“任意”) }) } 由于苹果在UNUserNotificationCeneter框架中发生更改, 因此如果我们每分钟调用2-3次以上, 则会多次调用本地通知发布问题。 没有记录实际的脱粒保持力。 APNS提供两种类型的远程通知。 推送通知–用作警报,并显示在通知中心。 静音推送-用于多语言支持。 这是APNS有效负载的示例json: { “ aps”:{ “ […]
查找新的Swift 2.2功能以增强Swift App开发服务。 作者是经验丰富的Swift应用程序开发人员。 凭借新的语法,新功能以及对过时功能的过时,Swift 2.2终于面世了。 是时候让Swift应用程序开发人员发挥最大的作用,并打造出可以为iPhone或iPad用户提供最佳体验的出色应用程序了。 如果您是Swift应用程序开发服务提供商,并且想磨练自己的技能,请花一些时间来学习Swift 2.2提供的新开发功能。 编译时Swift版本检查 是否由于发布后续版本的Swift而很难使每个Swift应用程序开发人员保持同一状态? Swift 2.2有望解决这个问题。 当前版本的编译器能够识别可以在特定设备上运行的版本类型。 因此,Swift应用程序开发人员仅需指示应为只读的代码块。 例如: #if swift(> = 3.0) 打印(“运行Swift 3.0或更高版本”) #其他 打印(“运行Swift 2.2或更早版本”) #万一 在以前的Swift版本中,如果设备与应用程序版本不兼容,则可能会导致运行时版本检查,从而导致应用程序失败。 编译时检查的选择器 最新的Swift版本可以查找和调试由于错字引起的编码问题,因为它放弃了选择器的使用。 相反,它将推送一个名为#selector的新语法。 因此,它可以在准备好测试或发布应用程序之前检查问题。 更多关键字作为参数标签 留下inout,var和let,使用您自己的一组关键字进行编码。 选择具有特殊含义且不能用作标识符的关键字,例如class,func,let和public,这将使Swift应用程序的开发更加容易。 要修复任何错误的标签,可以使用Xcode Fix-it。 这将帮助您快速轻松地找到并删除它们。 元组比较是内置的 元组是Swift中的基本数据类型,为Swift应用程序开发人员带来了很多优势。 但是,我们不能忽略它们经常从函数中返回多个值。 因此,它们在将一个元组与另一个元组进行比较时造成混乱。 例如,以下代码将打印“ No match”: 让歌手=(第一个:“泰勒”,最后一个:“雨燕”) 让外星人=(第一个:“ Justin”,最后一个:“比伯”),如果歌手==外星人{ 打印(“它们匹配!这说明了为什么您再也看不到它们了……”) }其他{ 打印(“不匹配。”) } 不推荐使用的功能 不推荐使用Tuple splat语法,循环和++的C样式以及—运算符,以简化和快速地编写代码,并为刚接触项目的Swift应用程序开发人员提供明确的指导。 希望您发现Swift […]
您是否觉得所有项目都应该使开发人员可以轻松地开始工作,而不是在“哦,在运行代码之前,请先执行此工作清单”和“我们应如何管理依赖项”上进行相同的讨论? 这是我较早的文章的第2部分,描述了为获得平稳的工作经验而必须培养的卫生意识。 这篇文章详细介绍了较早的文章,并提供了实际实施“卫生观念”各部分的示例。 此实现基于一个大型iOS应用程序项目,在该项目中我们还拥有一个Android App,因此选择了一些解决方案,以便也可以扩展到Android世界。 使用曲棍球而不是纯TestFlight。 它还假定要支持CI管道。 实作 首先成为一个富有同情心的文明成人-遵循以下简单方法可以 利益相关者确定优先级—敏捷原则或瀑布 敏捷价值观(4)和原则(12)通过在业务利益相关者和开发人员之间建立协作与信任,通过及早且频繁地交付工作软件来确保专注于客户满意度 我们发现Scrum简洁明了,易于解释。 练习它需要纪律。 瀑布可能在服务或维护项目中很有用,也许对位于不同位置和时区的团队而言 开发人员具有大屏幕-iMac屏幕或4K大屏幕 开发人员拥有IDE Xcode(Dev机器上AppStore的最新稳定版本) AppCode(需要许可证) 使用的版本控制系统 Git还因为Xcode附带 许可的GUI工具(如GitUp,Tower),因为我们喜欢成为可视化的人 Github Enterprise,它灌输了代码管理的良好实践 第三方经理的依赖管理器到位 Cocoapods或Carthage,因此对我们的依赖项已被锁定和神奇地管理🙂 Gemfile定义您对fastlane,Cocoapods和其他gem的依赖。 捆绑器使用。 确定要使用的包管理器 Homebrew-用于在macOS机器上安装软件包 Bundler —是一种Ruby宝石,允许您将所有项目的宝石及其版本打包在一个名为Gemfile的文件中。 `bundler`用于打包`gem`依赖,例如`fastlane`和`cocoapods`。 用于项目的Mac Environment设置应该是可发现的并且是自动化的 项目存储库具有引导脚本,用于安装常用的工具链(较小的引导程序) 在Mac上使用密钥进行git设置以进行版本管理 系统软件包管理器(自制软件) Ruby程序包管理器(Bundler) Ruby版本管理器(rbenv) Ruby安装程序(ruby构建) 最新稳定版本的Ruby或使用rbenv安装项目所需的Ruby版本 JavaScript软件包管理器(NPM) 在签出和引导过程之后,Devs&CI应该能够直接在Xcode中构建和运行代码 查看所有Pod来源 检入gitignore或gitmodules(对于子模块) 检入供应商/捆绑软件和供应商/缓存中是否有安装在特定版本的ruby上的gem,以便CI在干净签出后触发“ bundle install local”,并使用用于开发的gem,而不必检查 真相的单一来源-如果Android和iOS应用程序位于同一存储库中,则在存储库中包含配置和内容可确保 一个发行分支就足够了,而不必在每个共享存储库中都创建一个,这使得更容易通过一个发行分支来更新CI上的构建计划。 如果这些公共存储库包含在子模块中,则无需在项目中进行子模块管理 使构建更快 将功能分解为独立的模块,然后将其整合为框架。 Xcode不会一次重新编译框架构建并且不会更改,因此在大型项目中这会加快构建时间。 […]
自从Swift 3.0开源以来,它是Swift的第一个主要版本,自Swift 3.0到来以来,开发人员正在迅速赶上对核心语言和标准库的所有主要改进和改进。 大的欢迎变化之一是大中央调度 (GCD) 。 在性能,并发性,并行化和线程化方面,GCD是所有Apple平台上最常用的技术之一。 我们使用GCD解决的最常见的问题是在后台线程上运行任务的能力,以便不阻塞在主线程中运行的UI。 应用程序开发中的常见任务是从服务器下载图像,此任务可能需要x倍的时间才能完成,因此,如果您在主线程中运行此任务,则会阻止UI,并且用户将无法再操作该应用程序。 造成不愉快的用户体验,并可能使应用程序崩溃。 我们通过将任务分配给后台线程来解决GCD问题。 GCD通过将任务分配给主线程以外的其他线程或队列来利用CPU的多任务处理功能。 除了GCD,Apple还提供了NSOperationQueue框架来编写并发代码。 两者都旨在封装工作单元并分派它们以执行。 了解每个提供的好处将帮助您决定实施哪个。 在这篇文章中,我将主要关注GCD。 查看这个出色的博客,它解释了GCD和NSOperation的区别和好处。 在NSOperation和中央中央调度之间进行选择– Cocoacasts 自iOS 2起NSOperation和NSOperationQueue自iOS 2可用以来,Grand Central Dispatch(简称GCD)是…… cocoacasts.com Swift 3对GCD的更改使开发人员更容易,尤其是像我这样的新开发人员更容易回忆起代码并在项目中应用。 在Swift 3发布GCD语法之前,编码风格非常接近底层C,并且与Swift中的任何其他编码风格都明显不同。 新的GCD API主要围绕DispatchQueue旋转。 此类允许创建和修改队列, 同步或异步调度代码等等。 AD ispatchQueue可以是serial ,因此可以一次执行一个工作项,也可以是并发的 ,以使工作项按顺序出队,但可以一次全部运行并且可以按任何顺序完成。 串行队列和并发队列均以先进先出(FIFO)顺序处理工作项。 同步本质上是指“有序”。基本上,当您执行同步操作时,以后出现的所有内容都必须等待操作完成才能开始。 异步或多或少意味着“不按顺序进行”。当您异步执行某项操作时,以下代码可以立即运行,并且异步操作将……运行。 它可能与其他代码在另一个线程上并行运行。 可能只是在同一线程上安排了其他时间。 GCD分派使在后台线程上执行异步操作异常容易。 让我们从我当前正在使用的电影应用程序中查看下面的代码块。 首先,我对OMDB(电影数据库)服务器进行了API调用,如果请求成功,我将解析JSON并更新DispatchQueue.main.async {…}块内的UI。 DispatchQueue块内的任何代码,例如上传电影海报图像,都将在单独的线程上运行,并在完成后更新UI。 在运行此任务时,用户仍然可以不受阻碍地操作应用程序。
介绍 : 成为一名优秀的iOS开发者,正确学习非常重要。我们都知道互联网是最好的学习资源。但是在互联网上很多资源如果我们不知道去哪里,还有什么比难学的更好。因此,今天我将为iOS开发人员列出学习资源清单。 开始: 成为iOS开发人员之前,我们需要首先了解一种语言.Apple有两种本机语言Swift和Objective C.因此这里列出了Swift和Objective C博客以及您可以在其中学习的文章。 1,苹果Swift Book 它是学习Swift的最佳书籍,从基础到高级。可以从Apple网站免费下载。 2. swift.org Swift组织是学习Swift的另一个最佳资源 Swift.org Swift是一种通用的编程语言,使用安全性,性能和软件的现代方法构建而成…… swift.org iOS: 1.Apple说明文件: Apple官方文档最适合每个iOS开发者标签。所有Apple提供的框架和API都在此处进行了详细记录: Apple开发人员文档 浏览最新的开发人员文档,包括API参考,文章和示例代码。 developer.apple.com 2.雷文德利希(Raywenderlich): Raywenderlich是iOS开发最古老,最经典的网站之一。 raywenderlich.com | 高质量的编程教程:iOS,Android,Swift,Kotlin,Unity和… 高品质的编程教程:iOS,Android,Swift,Kotlin,Unity等! www.raywenderlich.com 3.AppCoda: App Coda是另一个经典网站,为初学者和中级iOS开发人员提供完整的iOS教程。 AppCoda –通过实践学习Swift和iOS编程 AppCoda是一家教育型创业公司,致力于教人们如何学习Swift和iOS编程博客。 我们的… www.appcoda.com 4,骇人听闻: 另一个iOS和Swift Great博客: 使用Swift进行黑客攻击–学习带有免费Swift 4教程的iPhone和iPad应用程序编码 通过这些免费的Swift 4教程 www.hackingwithswift.com 学习iOS的Swift编码。 5,编码探究器 它的经典网络博客特别适合初学者: Coding Explorer Blog –探索如何在Swift和Objective-C中为iOS编码 当天的最新更新已到:截至昨天,Swift现在已开源! 这预示着Swift的新时代…… www.codingexplorer.com […]
我们都使用应用程序。 我们整天使用它们,一天多次使用它们来完成许多不同的事情。 我们依靠这些工具来帮助我们度过一天,这与我们早上依靠汽车开车或依靠杂货店始终提供食物的方式不同。 这些工具(应用程序,汽车,杂货店等)对于我们的现代生活是如此重要,以至于如果它们断裂或消失,我们将无可奈何。 重要的是要知道这些东西是如何工作的,如果它们不能正常工作,我们可以制造出更好的东西,如果它们完全消失,我们可以进行重建。 出于这个原因,我决定对支持我的生活的工具如何运作有深入的了解。 随着时间的流逝,我已经学会了内燃的基本原理,并且可以在发动机熄火时更换汽车上的火花塞。 当然,我可以建立您的基本网站,但是对iOS应用程序的工作方式有深刻的了解吗? 对我来说这是新事物。 在我的前两篇文章中,我告诉您,我将学习如何在公共场合构建应用程序以及该应用程序将是什么。 从那时起,我一直在研究最好的方法来教自己如何做到这一点。 要构建可在iPhone(iPad,Mac等)上使用的应用,您需要使用两种编程语言之一。 这些天有一种ZILLION编程语言,所以我知道,甚至考虑到它们的存在就更令人生畏,更不用说开始研究一种了。 但是有些粗略的搜索会告诉您,在为iOS(苹果的移动操作系统)构建应用程序时,您可以将重点缩小到两个:Objective-C和Swift。 苹果几年前专门创建了Swift,目的是简化iOS应用的编写。 在此之前,所有iOS应用都是使用Objective-C编写的。 您仍然可以使用Objective-C来构建应用程序,但是为什么要使用Apple支持的这种新颖的新语言,为什么要这样做呢? 这样就解决了, 我将学习Swift。 自学编码的切入点很多。 从阅读来自世界各地的开发人员的随机教程到参加斯坦福大学提供的为期9周的iOS开发课程,您可以做任何事情。 我花了一些时间研究自己的选择,同时牢记我所寻找的道路理想情况下应该是自由,有趣,精心制作的,并从一开始就让我起步, 这是我可以找到的最好的Swift入门开发资源列表。 Udacity —使用Swift进行iOS开发简介 Udacity是位于Codeacademy,Code School,Treehouse等行列中的新型在线Web开发教育平台中的众多平台之一。它提供免费课程和付费课程以及订阅选项。 这是他们的免费课程之一。 该说明是通过一系列干净的,前瞻性的视频完成的。 这个免费的iOS教程让学生开发语音转换器应用程序。 也许这与我在飞机上见面的想法太不同了? 树屋-了解Swift 树屋设计精美。 超级友好的用户界面和受欢迎的颜色对该设计师非常有吸引力。 他们提供7天的免费试用期,虽然不错,但可能不足以让我得到所需的东西。 如果其他免费服务选项不足,我可能会回到这一点。 学习技巧 这个可爱的小目录提供了按难度级别组织的大量Swift开发资源的链接。 他们链接到的这一教程是免费的,并且看起来很全面。 可能是一个不错的起点。 斯坦福大学-使用Swift开发iOS 9应用 令人惊讶的是,有许多世界一流的机构免费在线提供课程资料。 我喜欢这个,主要是因为声望。 在斯坦福大学上课真是太酷了。 但是,教学风格似乎很宽松,所需的知识比我多。 一旦滚动,我可能会回来看看是否可行。 然后我将打印出一个伪造的斯坦福学位并将其贴在墙上😉 雷·温德利希(Ray Wenderlich)—斯威夫特 这个网站上有很多很棒的开发教程。 他的“斯威夫特”课从绝对的平方开始,即我所在的地方。 它是免费的,而且读起来很清晰。 唯一的缺点是他的网站非常注重游戏。 我的飞机上遇见人应用程序不是游戏,但是本教程提供的基本知识可能适用于各种应用程序吗? […]
我知道我知道。 关于为什么为什么以编程方式创建视图比通过Storyboards / Xibs进行创建更好或过时(取决于作者),有许多类似(已读:相同)的文章。 幸运的是,我不会讲解为什么编程视图优于Storyboards或Xibs。 为什么? 因为这三种方法都完成同一件事:创建iOS应用程序的用户界面。 关于这个话题将有无休止的辩论。 每种方法都有其自身的优势/劣势,每个人都有自己的偏好。 但更重要的是,只要iOS存活,每种方法都会存在。 正如我的金融教授曾经说过的:“前往拿骚街的方式不止一种。” 为什么我喜欢程序化视图 就个人而言,当我切换到以编程方式创建视图的方式比使用Storyboards或Xibs时,我了解的更多有关UIView及其实例/类方法的知识。 Storyboard / Xibs并没有真正教会我有关UIKit的内部工作的知识,就像它调用某些UIView方法时一样。 一切都是魔术。 作为软件开发人员,不知道事情是如何运作的,这是不行的。 就我个人而言,如果我不知道事情在软件开发中的工作方式,那将使我无休止。 我睡不着了。 在仔细阅读了Apple文档,Google,StackOverflow和iOSProgramming subreddit之后,我真的提高了对以下方面的理解: UIKit / UIView 自动版式 迅速 面向对象编程 此外,如果以编程方式创建视图,则可以更好地控制使用用户界面可以执行的操作。 (谁不喜欢他们的所作所为的绝对控制权?) 最后(也是我认为最重要的一点),您创建的UIView子类的每个属性都可以在一个.swift文件中看到。 您不必单击Interface Builder中的每个UIView即可查看其属性设置。 您修改的所有内容都是明确的。 我为什么要为一个已经有很多文章的话题发帖? 我已经阅读了许多关于iOS中程序化视图的文章/教程,但没有一个真正遵循Model-View-Controller模式。 这些教程很简短, UIView代码位于视图控制器中(您永远都不应在视图控制器中创建视图)。 我基本上不得不猜测如何将UIView代码从视图控制器中分离出来,但是幸运的是,在Google上进行了无数次搜索之后,我发现了一些可以帮助我入门的建议: 应该为每个视图控制器创建一个UIView子类,实质上是用Swift而不是XML编写的Xib。 这篇文章的目标 让读者(您)知道如何以编程方式(使用SnapKit)编写视图,而又不会破坏Model-View-Controller设计模式并防止创建Massive View Controller。 这不是初学者友好的教程 我假设您知道Xcode for Swift中单视图应用程序的基本项目结构,并且知道什么是Cocoapods以及如何使用它安装Pod。 您应该对保留周期有所了解,并对值类型和引用类型有所了解。 话虽如此,让我们开始吧! 教程! —基本设置 让我们从每个人最喜欢的视图开始进入编程视图:“登录身份验证”屏幕! 但是在开始之前,让我们从基本设置开始。 创建一个新项目:Single […]