Tag: Objective C

使用协议进行Swift类型推断

如果您来自Objective-c世界,那么您会欣赏Swift类型推断的,其中编译器会在编译时自动确定实例的类型,而无需显式编写类型。 这并不新鲜。 许多其他语言(例如C#和Kotlin)都具有此功能。 Swift的出色之处在于,您可以为自定义类获得相同的类型推断,从而部分地使您的代码更简洁。 制作URL的一种非常常见的方法是从字符串初始化。 符合ExpressibleByStringLiteral协议,该协议定义了具有关联类型的初始化程序。 我们可以扩展URL并确认协议。 在这里,您拥有它。 使用类型推断定义的URL对象实例。 结论 如您所见,进行自定义类型推断非常容易。 Swift几乎没有其他协议集合,可选协议等。 ExpressibleByArrayLiteral ExpressibleByDictionaryLiteral ExpressibleByIntegerLiteral ExpressibleByFloatLiteral ExpressibleByBooleanLiteral ExpressibleByNilLiteral ExpressibleByStringLiteral ExpressibleByExtendedGraphemeClusterLiteral ExpressibleByUnicodeScalarLiteral

自定义布局cho UICollectionView ???

Chàomọingười❤Đãlâulắmrồimìnhmớingồiviếtmộtbàimới。 Mìnhgầnnhưquênluônmụctiêutừlulúcbắtđầuviếtnhữngbàiđầutiên:))))Chắchẳnlàdoquálườimànên:’( 自定义UICollectionView,自定义布局布局自定义布局:。:môôôôôUI UI UI UI UI UI N UIubạnđãquenlàmviệcvớiUICollectionViewthìsẽbiếtnó“ ngon”nhưthếnào:3Cóthểkểtớinhưkhảnăngcustomvôhạn,内置动画vàtrongnhữngnămgầnquamứta,我的UICollectionView具有良好的效果。 Trongphạmvibàiviếtnàymìnhsẽkhôngnóichitiếtcách工具实施自定义布局màchỉnóitớicáckháiniệmvàlýthuyếtquantrọngcầnbiết。 Mìnhsẽđínhkèmmộtsốhướngdẫncụthđểđểđểcuốibàiviết。 Nhưcácbạnđãbiết,UITableView,UICollectionViewtáchbiệtphần布局和数据源riêngbiệt。 布局对象(UICollectionViewLayout)的布局,UICollectionView,数据源的视图,布局视图,布局对象的cung; UITableView的外观1布局dunnhấtkhôngthểcustom,chỉcóthểtuỳbiếnmộtthuộctínhthôngqua委托。 Collection UICollectionView,m layoutithểlo layouti layoutvớinó,ngang,dọc,grid,dạngstack,rồicókhicảhìnhtròn=))) 在iOS 6中,Apple可以选择具体类的UICollectionViewLayout和UICollectionViewFlowLayout。 流布局đểcdùngđể实现các布局dạng网格,đ用例phổbiếnnhấtcủa集合视图通过iOS,TACóthểyấphầnlớncácappmặcđịnhcủniOS,nhưPhotos集合视图。 流程布局 流布局基于行的布局,布局对象可以是x,pcếc项目trênmộthàng,vànósẽtínhtoánlàmsaođểcóthểchứacàngnhiều项目trênhàngtđc。 tớikhikhôngcònthểnhétthêmbấtcứ项目nàonữathìnósẽtạoramộthàngmớivàbắtđầulặplạicôngviệcnàychođếnkhihếttấtcả项目。 Nếucónhiềusectionthìsẽlayout chođếnkhihếtitems trong sectionđóvàbắtđầusectionmới。 流程布局滚动显示(1滚动方向),垂直向水平。 垂直滚动项目,水平布局项目,水平滚动项目。 布局错误,cácitemstrêncùngmộthàngsẽcanc canhchínhgiữahàngđó。 Ngoàira,流程布局còchophépchúngtatuỳchỉnhthêmmộtsốthuộctính,vídụnhư:线间距và项间间距干草插入点của截面。 Xemthêm: 定制流布局属性 。 Nếu流布局đãgầnhh cungcấpấyđủnhữngthứtacầnthìkhinàochúngtacần自定义布局: Nếukhôngmuốn1布局基于行的干草网格(hìnhtrònnhưđãnóiởtrên:))) 完全掌控元素布局,一切都在掌控之中。 Thêmcác补充了干草装饰视图vàđặtchúngởmọivịtrí,chứkhôngchỉ页眉干草页脚视图mà支持流布局sẵn。 布局:3布局布局对象布局​​对象布局​​对象布局​​对象布局​​对象布局​​对象布局​​对象布局​​对象布局​​对象布局​​对象布局​​对象布局​​对象布局​​对象布局​​对象布局​​对象布局​​对象布局​​对象布局​​对象。 核心布局过程 布局对象可以通过集合视图进行布局过程。 Khi集合视图cầnthôngtincủa布局,nósẽhỏi布局对象cungcấpnhữngthôngtinđó。 布局对象可以从数据源中获取布局。 视频:numberOfSections,numberOfItemsInSection,… 自定义布局,子类UICollectionViewLayoutđểtuỳbiến,sẽcómộtsốbướcchính,cũngnhưcác方法đikèmnhưsau: 1.prepareLayout :đđong trong布局过程。 elementsàlàlúcchúngtaphảithựchiệnmộtsốtínhtoánđểxácđịnhđượcvịtrícủacác元素的总体布局。 […]

iOS-您的实际住址是什么?

如果您问与IT无关的人,“您的实际地址是什么?”,他们可能会告诉您他们房屋的地址。 但是,在本文中,我们将讨论本地网络上的MAC地址以及如何使用iOS检索它们。 ARP表和API 因此,当我意识到Apple没有为我们提供访问iOS设备的ARP(地址解析协议)表的API时,我正在尝试为我的项目(IT Buddy)开发网络扫描仪。 在Google和StackOverflow上花费了大量时间后,我想出了自己的完整解决方案,希望与您分享。 获取必要的文件 首先,您需要将Mac OS X中的某些文件复制到Xcode项目中。 转到/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/usr/include (其中MacOSX10.11.sdk是您的Mac OS版本,例如MacOSX10.10。 sdk)。 然后从“ net”文件夹中将 n拖放route.h,if_arp.h,if_types.h并将if_ether.h从“ netinet”文件夹中拖放到您的Xcode项目中。 选择“ 根据需要复制项目 ”。 现在我们需要编辑“ if_ether.h ”。 找到该行“ #include ”,并将其替换为“ #include“ if_arp.h” ” 然后导入MacFinder.h: 和MacFinder.m: 使用MacFinder 将MacFinder.h导入控制器后,您可以使用以下代码获取网络中任何IP的MAC地址: NSString * mac = [MacFinder ip2mac:” 192.168.10.24“]; NSLog(@“ Mac:%@”,mac); 如果您在文件或实现方面遇到问题,可以在此处下载完整的项目。

为什么您永远不应该将封闭/块保留为强?

因为 曾经有个好主意说: 不要让任何东西变得足以摧毁你。 开玩笑! 这只是我自己想到的。 我正在修复错误。 我确实修复了它,但我不知道它会在其他功能上产生连锁反应。 我所做的只是在从主线程上的API提取数据后,仅更新UI。 这是一个主屏幕,我们在其中隐藏了我用来更新UI的功能内的导航栏(我不知道被隐藏的导航栏也位于该功能内)。 两天后,QA向我提出了一个错误,即从Home控制器转到另一个控制器后,导航栏在几秒钟后自动隐藏起来。 仅当您在应用程序打开后从Home转到另一个控制器时,才会发生该错误。 该错误真的很奇怪,因为在视图控制器的viewDidLoad中, setNavigationBarHidden设置为NO ,并且无法正常工作。 然后,我尝试在存在API调用的地方将setNavigationBarHidden设置为NO 。 这似乎也不起作用。 我在整个项目中搜索了setNavigationBarHidden ,发现唯一将其设置为YES的地方是一个未被使用的控制器。 这有点烦人,因为我似乎无法真正从setNavigationBarHidden的位置设置为YES 。 好吧,我当然很累,字面意思是: 因此,我决定向同事寻求帮助(你们也应该尝试一下。当您讨论事物时,它总是有帮助的)。 首先,他还尝试了与我相同的方法,然后为了调试setNavigationBarHidden属性,我们决定覆盖 setNavigationBarHidden属性,并查看从何处设置该属性(我不知道为什么一开始我就没想到它)。 调试后,它使我进入了两天前在Home控制器的主线程内调用的UI更新功能。 因为UI更新功能是在dispatch_get_main_queue()内部编写的,所以它是一个闭包。 不可避免地,将Home控制器的自身捕获到内部,这导致导航栏隐藏。 因此,通过在weaks_get_main_queue dispatch_get_main_queue()内部提供弱更新的UI更新功能可以解决此问题。 对于所有想知道为什么我只找到一个setNavigationBarHidden集的人 搜索整个项目后,请选择“是” 。 原因是用于隐藏导航的属性,直接有navigationBarHidden而不是它的setter。 我的错。 原谅我太人性化了。 😀 是的,仅仅是一个强大的封闭/障碍 会浪费很多时间。 学过的知识!

UITableView使用AutoLayout自动调整页眉和页脚视图的大小

在本文中,我将尝试揭露UITableView类的一些怪癖,并向您展示实现可变高度的页眉和页脚视图的最简单方法。 对我来说,编写UI的简单性实际上根本就是不编写任何UI。 在本文中,我将尽可能多地使用界面生成器🙂 我将仅出于简单起见谈论页眉,但页脚也完全一样。 TableView设定 分组样式表或纯样式TableView的标题与UITableView的任何其他行都没有不同。 设置实际上非常简单。 需要设置sectionHeaderHeight和estimatedHeaderHeight 。 UITableView.automaticDimension是使AutoLayout能够在运行时计算每个单元格的高度的工具。 应该将EstimatedHeaderHeight设置为对其内容的总高度的粗略估计,以显示滚动指示器。 在情节提要中选择TableView时,可以在“大小”检查器中设置这些属性。 创建标题视图 tableView(_:viewForHeaderInSection:)应该返回UIView的实例,但是您猜怎么着? UITableViewCell是UIView的子类。 这意味着我们可以使用情节提要板创建一个原型单元,该单元将从该函数中出队并返回。 我认为,这是在一个位置声明所有视图的最干净的方法,而不是将许多xibs散布在整个项目或在代码中声明为原型的单元或其他单元中。 我创建了一个原型单元,该单元由左侧的ImageView,标题和字幕标签组成。 在此项目的任何地方都没有设置静态高度。 我们希望自动布局根据标签的固有内容大小(将在运行时由其内容定义)来计算单元格的高度。 标签包装在StackView中,并限制在单元格内容视图的所有四个侧面。 我更喜欢在创建视图时使用StackView来减少定义的约束数量。 为了返回视图,我们调用dequeueReusableCell(withIdentifier identifier: String) -> UITableViewCell? 。 我们不使用此函数的forIndexPath:风格,因为我们没有为标头行定义indexPath。 同样, forIndexPath:断言为出队的单元格定义了一个重用标识符,以防止返回nil。 在我们的情况下,可以显示没有标题的部分。 警卫让headerCell = tableView.dequeueReusableCell(withIdentifier:“ header”)else { 返回零 } 空白部分标题 通过设计,如果在组样式表视图中没有为节定义标题,则框架将呈现30像素的空白视图。 苹果公司认为将不同的部分作为一个部分出现看起来很奇怪。 有时,我们只是想违反规则。 ♀️ 要解决此问题,可以使用CGFLOAT_MIN常量。 它代表CGFloat的最小非负值。 对于32位和64位代码,值分别为1.17549435e-38F或2.2250738585072014e-308。 毕竟,它不是零像素。 另一方面,在纯样式表视图中,标题高度可以设置为大于或等于0的任何值。 对于这种特殊情况,我们需要使用tableView(_:estimatedHeightForHeaderInSection:)和tableView(_:heightForHeaderInSection:) 。 如文档中所述,必须实现这两个功能以定义自定义视图的高度。 结论 我很困惑地看到想要实现高度变化的标头的人对StackOverflow有如此多的攻击。 这是我在使用TableView时一直使用的简单技巧,希望它对您和我一样有用。 […]

使用Swift优于Objective-C的优点

一篇文章旨在强调Swift编程语言的主要优点 。 在这里,我想从一个快速的测验开始。 问题: iOS应用程序使用哪种编程语言? a)C ++ b)目标C c)迅速 显然,如果您已选择上述所有内容-您100%正确,那么在提及iOS开发时,所有提到的语言都可以使用。 但是,由于它们之间巨大的“代沟”,提到所有这些都不相同并不奇怪。 在我们的博客上阅读有关Swift和Objective-c的完整材料!

开发iOS应用程序时,Objective C与SWIFT进行比较。 选择哪一个?

已经看到许多语言进入和退出了移动应用程序开发行业。 因此,开发人员总是想知道他或她应该为移动应用学习或使用的最佳语言是什么,以便可以随时随地轻松使用而不必担心。 在考虑最知名的语言时,突出的一些功能包括:开发人员可以轻松使用它,为编码人员提供进行实验的空间以及在金钱方面当然可以肯定该语言的有效性。 在考虑所使用的语言时,Android应用程序的开发似乎已成定局。 但是,当我们谈论iOS应用程序的开发时,总是会怀疑哪种语言更好。 许多开发人员对SWIFT和Objective C都有很多疑问。因此,本文旨在为开发人员更清楚地了解这两种语言。 来源: SWIFT是一种开源语言,因此在这里被认为更好。 与目标C相比,访问所需的时间相对较少,并且具有较低的成本效益。Swift是一种开放源代码语言,它比目标C拥有巨大的优势,许多公司(尤其是初创公司)已开始适应SWIFT。 耗时: 每个公司都希望在最短的时间内交付数量最多的产品。 Swift有助于这样做。 由于Swift中提供了许多软件包,因此开发人员可以尝试与其他软件包合作,并共同努力以更好地掌握逻辑。 对错误说不: 每个人都讨厌的一件事是错误。 开发人员喜欢帮助他们识别和纠正这些错误的语言。 Swift正是这样做的。 Swift启用了运行时崩溃,该崩溃在修复错误的过程中起作用。 这有助于开发人员现场修复错误并按计划完成开发工作,而不会浪费大量时间在错误上。 安全与维护: 谁不喜欢安全和免维护的语言? 安全也是移动开发过程中最关键的因素之一。 一个好的应用程序是功能最安全的应用程序,而其维护量最少。 当开发人员使用Swift进行移动应用程序开发时,都可以确保这两者。 未来: Swift是苹果公司推出的一种结构良好且组织良好的开源语言。 与Objective C相比,Swift始终脱颖而出,因为它速度更快,所需的内存管理更少。 这使Swift成为业内同类竞争对手中的坚强竞争者。 总而言之,我想说的是,除非有一种全新的语言进入竞争,否则Swift无疑是iOs应用程序开发人员的前进方向。 同样,对于使用Objective C的开发人员来说,迁移到Swift并不是一件困难的事情,因为它是一种非常用户友好的语言。 您可以通过contact@yugasa.com与我们联系,与我们讨论您的IOS应用项目。 我们非常乐意协助您进行产品开发。 最初于 2018 年6月21日 在 yugasa.com 上 发布 。

初期

(本文最初于2018年1月13日发布在这里) 我一直想进入iOS开发已有几年了。 早在2014年,我除了在大学里读过几门课程之外就没有任何编程经验。 所以我开始在iOS上阅读,然后在Swift宣布之前涉足了Objective-C。 我购买了Stephen G Kochan的《 Objective-C编程》一书,并注册了一个有关iOS编程的Udemy视频课程。 尽管我确实设法在App Store上发布了基本的BMI计算器,但我都没有完成任何一项(也许完成了10%左右)(是的) 三年后,我决定再次尝试iOS编程。 那是2017年初,我刚刚在Udemy购买了Devslopes的iOS 10课程。 这次我实际上比第一次尝试走得更远,尽管在课程进行到一半时材料的难度大大提高了。 在浏览视频时,我不了解大多数情况,因此感到沮丧。 我试图通过它来蛮力,我在iPhone和计算机上使用了Anki抽认卡,并建立了一个精致的系统来尝试记住各种功能和API调用。 我会从字面上背诵自己的话,例如当我走在街上时如何设置UITableView。 这太可怕了,我最终决定需要购买一本好书来补充视频教程。 在网上进行了一些研究之后,The Big Nerd Ranch的Swift Programming书似乎是一个不错的选择。 我最终非常喜欢这本书,暂停了Udemy课程,并在大约2个月的时间内浏览了整本书。 一些挑战特别艰巨,尤其是在即将结束时。 幸运的是,他们有一个在线论坛,读者可以在其中讨论解决方案。 当Swift 4和iOS 11发布时,由于我认为它已经过时了,我停止了iOS 10 Udemy课程的开发。 回顾过去,这可能是一个错误,因为我觉得我仍然存在的一些鸿沟可能已经通过该课程得到了纠正。 接下来,我偶然发现了Paul Hudon撰写的Hacking with Swift书,其中包含出色的终身Swift更新策略,这意味着您可以免费获得Swift 5、6等的更新。这就是我开始更加自信的地方。用我的Swift编程技能 我将在下一篇文章中讨论!

Swift中面向框架的编程

我受到Justin Spahr-Summers在2015年Pragma会议上的演讲的启发,他为设计可用和赋予用户权限的库提供了知识和动力。 面向库的编程 创建一个简单的,可封装的,可维护的库似乎是个白日梦,但实际上是可以实现的…… academy.realm.io 因此,我开始应用这些创建框架的原则来分离关注点,并在应用程序中创建了大约8–9个框架,其中一些如下。 RKUIKit RKCoreData RKNetworking RK基金会 …。 更多 当这些框架都是从Apple Xcode模板提供的初始结构开始时,创建它们就很困难。 因此,我在互联网上寻找解决方案并找到了cookiecutter。 一个命令行实用程序,可从cookiecutter(项目模板)创建项目。 例如Python封装项目,jQuery插件项目。 我创建了一个FrameworkTemplate,以使所有框架均可用于开源,包管理器,iOS / macOS / tvOS / watchOS,travis-ci,README,github模板等。 JetpackSwift /框架模板 FrameworkTemplate —一个新的Swift iOS / macOS / tvOS / watchOS框架项目的模板,已准备好travis-ci… github.com

KatılımcıRöportajları

“ÖğrenmeninYaşıYok”(canlıyayın)