从无到有的开发指南 介绍 我们正在努力使本教程系列对您来说尽可能简单。 您将通过完整的源代码学习iOS开发的所有核心概念。 不要等待,让我们深入了解新的iOS世界。 仅需5个步骤即可开发您的第一个应用程序 步骤1:设定您的MAC机器 从Apple Developer Site下载Xcode9。 确保已安装macOS 10.12.6或更高版本。 下载Xcode后,解压缩.xip文件。 现在,摆在您面前的是iOS开发的第一步。 📱 以上帝的名义-最仁慈,双击打开Xcode。 步骤2:设置您的第一个应用| HelloUniverse 选择创建一个新的Xcode项目 选择“ 单视图应用程序” ,然后单击“ 下一步”。 提供您的第一个应用程序的名称,假设它是HelloUniverse 建议不要在产品名称中使用空格 现在选择无团队 添加组织名称,在这里使用队长 。 您可以在此处将您的名字用作组织。 添加组织标识符: com.captain.HelloUniverse (com.companyname.appname) 选择语言Swift 单击下一步,然后创建您的第一个应用程序。 在这里,您可以使用屏幕上的第一个应用程序 步骤3:执行应用程式 按Command⌘+ R运行应用程序 它将启动iOS模拟器并运行您的第一个应用 感到兴奋和快乐? 😃 这是您在iPhone X上运行的第一个应用程序-模拟器 如果您无法在iPhone X上运行您的应用程序,请不要担心。 只需单击Xcode的TopLeft一侧的模拟器区域即可更改模拟器 选择任何iOS设备模拟器,然后再次运行您的应用 步骤4:向Universe问好 现在我们在屏幕上看不到任何内容,让我们在屏幕上添加一些内容 通过单击打开Main.storyboard 故事板是一个文件,用于设计屏幕并布局所有组件,例如按钮,标签,列表,选项卡和导航栏等等。 现在您将看到空白视图,其中没有任何内容,请放心,我们将添加标签向Universe打个招呼。 单击视图的中心(屏幕上方带有箭头的视图)以将其聚焦 此视图是屏幕的主视图,您将看到的所有内容都将在此屏幕内 在屏幕的右下角,您将找到4个标签,选择第三个标签,即对象库 […]
Kali ini kita akan membahas komponen活动指示器yang disediakan MDC untuk平台iOS。 Untuk menggunakannya kita tinggal perlu menambahkan依赖baru sebagai berikut pod’MaterialComponents / ActivityIndicator’ Setelah Pod安装 kita阿肯比萨menggunakan类MDCActivityIndicator杨disediakan oleh MDC untuk mereplikasi 行为 dari ProgressBar pada Android。 让指标= MDCActivityIndicator() indicator.cycleColors = [.red] indicator.translatesAutoresizingMaskIntoConstraints = false self.view.addSubview(指标) indicator.startAnimating() Kode di atas阿肯色议员hasil seperti berikut MDCActivityIndicator memiliki 2模式。 Secara 默认模式yang digunakan adalah 不确定 […]
可编码协议确实有助于简化开发人员的生活。 它使我们能够将JSON响应转换为模型对象,而无需经历解析每个对象的繁琐过程。 我们如何在Swift中使用Codable协议? 为了更好地理解这个概念,让我们开始尝试一些编码示例: Flickr 搜索JSON示例: { “ title”:“最近上传带标签的searchtag”, “链接”:“ https:\ / \ / www.flickr.com \ / photos \ / tags \ / searchtag \ /“, “描述”:“”, “已修改”:“ 2014–05–06T05:45:56Z”, “生成器”:“ https:\ / \ / www.flickr.com”, “项目”:[{ “ title”:“ Bird \ / Pleasanton-CA”, “链接”:“ https:\ / \ / www.flickr.com \ / photos \ / geziyozbiz \ […]
在重复的用户操作可能导致发生网络请求的情况下,将呼叫反跳非常有用。 问题在于用户的动作可以在短时间内生成许多请求,这在蜂窝网络上的响应速度可能很慢。 场景:用户连续点击按钮,但只接受最后一个,所有先前的请求都被取消。为简单起见,fetchMethod()打印计数器值。 1:延迟后使用Perform Selector: 类ViewController:UIViewController { var计数器= 0 覆盖func viewDidLoad(){ super.viewDidLoad() } @IBAction func tapButton(sender:UIButton){ 计数器+ = 1 NSObject.cancelPreviousPerformRequests(withTarget:self,选择器:#selector(fetchMethod),object:self) self.perform(#selector(fetchMethod),with:self,afterDelay:3.0) } func fetchMethod(){ print(“ fetchMethod:\(counter)”) } } //输出: fetchMethod:1 //单击一次 fetchMethod:4 //单击4次, //但先前的触发器被取消 // cancelPreviousPerformRequests 2:使用DispatchWorkItem: 类ViewController:UIViewController { 私人varendingRequestWorkItem:DispatchWorkItem? 覆盖func viewDidLoad(){ super.viewDidLoad() } @IBAction func tapButton(sender:UIButton){ 计数器+ = 1 endingRequestWorkItem?.cancel() 让requestWorkItem = DispatchWorkItem {self中的[weak […]
Merhaba TurkishKitokuyucuları,yepyeni bir seri ilekarşınızdayız! Uygulamalararınızaufak bir database(veritabanı)ekleyemeye ne dersiniz? iOS版cihazlarınkendihafızasınakaydedebilirböyleceuygulamanızkapatılıpyenidenaçılsabile kaydetemisolduğunuzverileriam! Bir iOSuygulamasındaküçükverileri kaydetmekiçinUserDefaultskullanıyoruz。 O zaman hemenkeşfetmeyebaşlayalım! Bazıdurumlardauygulamamızdaayar,kullanıcıtercihleri veyagirişyapmışolankullanıcınınbilgisi gibi azküçükveriler kaydetmemiz gerekiyor。 您可以在数据库中找到自己的数据库。 CoreData ve Realm bu serimizin ilerleyenkonularıdır。 库克(Küçük)VeriÖrnekleri; Uygulamanızda视频içeriklerigösteriyorsunuzvekullanıcınızvideolarınoynatımhızınıayarlıyor。 用户默认值kullanarak kaydetmelisiniz。 Böyleceuygulamayıtekraraçankullanıcı,öncedenkaydettiğioynatımhızındavideolarınıizlemeye devam edebilir。 Kullanıcıuygulamanızagirişyaptı。 用户手册。UserDefaults’a kaydedersiniz。 Böyleceuygulamanızıyenidenaçanbirkullanıcı,girişyapmadan devam edebilir。 Twitteruygulamasının夜间模式(Gece Modu)ve白天模式(GündüzModu)isimli ikifarklıarayüztemasıvar。 用户默认值ile kaydedilir。 用户默认设置ile Data olarak ifade edilebilecek(dünyaüzerindeki她的名字:))tümverileri saklayabiliriz。 […]
从iOS 9+版本开始,不推荐使用AddressBookUI.framework和Addressbook.framework。 Apple引入了ContactUI.framework和Contact.framework,并且对AddressBookUI.framework和Addressbook.framework进行了增强。 在此博客中,我们将讨论如何使用这两个新框架以及如何导出VCard。 让我们开始从电话联系人中选择联系人并访问该人的基本信息。 步骤1.创建新的Xcode项目名称“ ContactDemo”,并导入Contacts.framework和ContactsUI.framework,如图所示。 步骤2.在项目中添加Button,ImageView和3个标签,如图所示: 步骤3.在相应的视图控制器中创建按钮动作,imageview和标签的出口,如下所示: @属性(弱,非原子)IBOutlet UIImageView * personImage; @属性(弱,非原子)IBOutlet UILabel * personName; @属性(弱,非原子)IBOutlet UILabel * emailId; @属性(弱,非原子)IBOutlet UILabel * phoneNo; –(IBAction)selectAction:(id)发送者; 步骤4.将委托“ CNContactPickerDelegate”添加到viewcontroller。 步骤5.添加委托方法: –(无效)contactPicker:(CNContactPickerViewController *)picker didSelectContact:(CNContact *)contact { [自己的getContactDetails:contact]; } 该委托方法将以CNContact对象的形式返回联系人,该联系人将在本地方法中进一步处理 -(void)getContactDetails:(CNContact *)contactObject { NSLog(@“ NAME PREFIX ::%@”,contactObject.namePrefix); NSLog(@“ NAME SUFFIX ::%@”,contactObject.name后缀); NSLog(@“家族名称::%@”,contactObject.familyName); NSLog(@“ GIVEN NAME ::%@”,contactObject.givenName); NSLog(@“中间名::%@”,contactObject.middleName); NSString […]
这篇文章将逐步指导构建可以与C代码交互的Swift库的过程。 它还将介绍如何将C接口包装到Swift API中。 所有使用SwiftPm 。 Swift Package Manager是一个功能强大的工具,这是一种从中获得最大收益的方法。 首先,要多少钱? 世界在C驱动的设备上运行。 无论我们是否意识到,我们每天都在使用这些设备。 C是软件的许多领域的过去,现在和据我们所知仍然是未来。 尤其是当性能成为重中之重时。 到处都有C库,C的最大好处就是它的性能。 太酷了,但是我们可以在Swift中使用这些库而不会带来麻烦吗? 我们可以混合使用C和Swift来达到更高的速度吗? 我们可以! 我们进行了所有分析,并在以后的文章中介绍了所有详细信息。 现在,您需要知道的是,从Swift调用C函数非常便宜,我的意思是说非常便宜。 另一个有趣的功能使Apple的热门新语言更具吸引力! 事不宜迟……开始吧! 使用SPM创建一个新项目 这非常简单,创建一个新目录,然后让SwiftPM发挥作用。 $ mkdir SwiftWrapper $ cd SwiftWrapper 然后, $ swift package init –type library 并且您应该具有这样的树结构: 迅捷包装 ├──Package.swift ├──README.md ├──资料来源 │└──SwiftWrapper │└──SwiftWrapper.swift └──测试 ├──LinuxMain.swift └──SwiftWrapperTests ├──SwiftWrapperTests.swift └──XCTestManifests.swift 将您的C代码放入项目中 我们将使用令人惊叹的RoaringBitmaps库中的C代码。 当然,请使用您自己的代码! 您只需要.c和.h文件。 在Sources/下创建一个新文件夹,您将在其中存储C代码。 当前正在执行的命名约定如下所示: C[NameOfYourLibrary] […]
在进入Capture List之前,让我们谈谈关闭周期。 这是Apple文档中的定义 闭包是可以独立传递的功能块,可以在代码中传递和使用。 Swift中的闭包类似于C和Objective-C中的块以及其他编程语言中的lambda。 闭包可以从定义它们的上下文中捕获和存储对任何常量和变量的引用。 这称为关闭这些常量和变量。 Swift为您处理捕获的所有内存管理。 这是一个关闭的例子 每当我调用increment()时,闭包都会增加数字的值 由于Closures是引用类型,因此我们可以使用类来模拟Closure,因为Classes也是引用类型。 每当我更改调用该方法时,它都会增加该存储的属性。 现在,这是一个可能导致泄漏的示例。 我将crementNumber方法更改为闭包,并作为存储的属性,输出精确给出了我想要的数字。 但这会导致内存泄漏,闭包是指对象本身,它是指self以增加数字,这将创建一个引用周期: 我们有一个对象,并且该对象具有一个存储的属性,该属性引用一个闭包。 该闭包指的是self (表示增量实例) 让我们添加deinit方法并检查它是否具有保留周期 块(Curly大括号)结束时, increment()实例应为释放内存。 捕获列表将帮助我们修复它吗? 通过添加[unowned self] 然后打印出deinit ,这意味着在闭deinit我们引用self地方,它都将是无主的,不会再强引用self ,因此不会泄漏。 但是,在使用[unowned self]时,应谨慎行事。 如果我实例化increment() ,那么我立即用三个调用increment,程序将崩溃,因为当存储的属性返回时,对象(increment实例)可以被释放,其他都没有引用它。 那么如何解决它,让我们将[unowned self]更改为[weak self] ,这意味着在访问该self的任何地方,我们都将其视为弱属性。 当存储的属性返回时,如果对象被释放,则平均值为nil,则数字将不会增加。 如果self为零,此代码将使其易于处理 就是这样,希望您喜欢这篇文章,感谢您的阅读,下次再见。
Swift软件包管理器与Swift 3.0一起正式发布,是一种在macOS和Linux上创建Swift库和应用程序的新方法。 它可以帮助您管理依赖关系,并允许您轻松地构建,测试和运行Swift代码。 重要的是要注意,作为Swift 3,Swift软件包管理器仅针对主机平台进行编译。 换句话说,目前您将无法为iOS,watchOS或tvOS构建或使用软件包。 我们走吧!! 开始之前,请确保已安装Swift 3.0或更高版本。 Swift 3包含在Xcode 8.0+中,因此,如果您具有Xcode 8或更高版本,则可以开始使用。 实际上,您甚至不需要Xcode即可完成本教程的大部分内容。 您只需从swift.org安装Swift 3。 打开一个新的终端窗口,然后键入swift package 。 您将看到命令概述。 您将使用的主要命令是: swift package init以创建新包 swift package update以更新swift package update的依赖关系 swift package generate-xcodeproj为您的软件包生成一个Xcode项目 要了解Swift包管理器,您将创建一个命令行应用程序,该应用程序使用一个小型库来为任何国家/地区打印表情符号标志。 您将从创建可执行程序包开始。 这些程序包是命令行应用程序。 Swift Web应用程序也属于此类。 通过在终端中运行以下命令来创建Flag可执行程序包: mkdir标志 cd标志 swift package init –type可执行文件 当前目录Flag在运行swift package init时很重要,因为它成为生成的包的名称。 您会在输出中看到一些为您创建的文件和文件夹。 花一些时间来熟悉项目结构: Package.swift具有您的程序包描述,还将具有您程序包的依赖性。 顾名思义, Sources/是所有Swift源文件的存放位置。 还为您创建了一个main.swift文件。 这将是您的应用程序的入口点。 现在,它将向终端打印“ […]
“ DeveloperDay #02 ”( 开发人员日 #02)系列产品,来自以下网站:http://support.microsoft.com/kb/kb/zh-CN/。 凯西弗勒 产品名称:Hunt,YazılımGeliştiricileriçinokunası,作者:12 en etkilikitabılisteyen bir koleksiyonyayınladı。 Özellikle实用的程序员,可以说是mutakkaokunmasıgerektiğinidüşünüyorum。 ProductHunt书籍– Product Hunt对软件工程师的12最具影响力读物 由ProductHunt Books策划的馆藏,特色产品包括计算机编程艺术,实用英语… www.producthunt.com Verimlilik konusundainanıyorumpekçoğumuz,bellimetodlarıdeniyor yadaaraştırıyorve acabanasıldaha verimli olabilirim diyedüşünmüşüzdür。 James Cleartarafındanyazılan “ 默认决定 ”, konuluyazısı,günlükrutinaldığımızkararlarınhayatımızıne kadaretkilediğiniveaslındanasılda monotonyaptığımızüıııııııııııııııııııııııııııııııııııı James’inverdiğiörneklerde,CEP telefonunuyatağın亚尼纳koyupyattığımızda沙巴的Kalkar kalkmaz之流IŞolarak耶尼epostalarıKONTROL ediyor已经sosyal medyahesaplarımızabakıyoruz亚达akşamkoltuğumuzaoturduğumuzdakarşımızdaTV’yi duruyorsa,电视izlemeyebaşlıyoruzVB。 默认情况下,默认设置为“否”,默认状态为“默认设置”,默认设置为“默认设置”。 默认设计:如何优化您的日常决策 您可能会假设人们购买产品是因为它们是什么,但事实是我们经常购买产品是因为… medium.com Smooch,儿子zamanlardakeşfettiğimgözalıcıgirişimlerdenbiri。 Bot devrimi ile birlikte yapay zekaya sahip bot’lar ve uygulamaiçidavranışlarsağlamalarıilgiçekici。 […]