Tag: swift4

如何使用Swift 4添加FaceID / TouchID

FaceID和TouchID可以在应用程序中使用,以验证用户身份以进行应用程序内购买或访问个人信息或更多。 检查钱包应用程序,几乎所有应用程序都启用了TouchID。 好的,让我们看看苹果对这些身份验证机制的看法。 要求用户仅进行身份验证以换取价值,例如个性化体验,访问其他功能,购买内容或同步数据。 如果您的应用程序需要身份验证,请保持登录过程快速,轻松且不干扰用户,以免影响应用程序的使用乐趣。 尽可能支持生物特征认证。 人脸ID和触摸ID是人们信任的安全,熟悉的身份验证方法。 嗯!! ..听起来很有说服力。 让我们看看如何将TouchID和FaceID添加到应用程序中。 第一项工作是将LocalAuthentication导入到应用程序。 然后,我们创建了一个LAContext对象,该对象将提供一个UI,用于评估身份验证策略和访问控制,管理凭据以及使身份验证上下文无效。 在为TouchID / FaceID身份验证添加任何代码之前,请不要忘记添加#available(iOS 8.0,macOS 10.12.1,*) 。 iOS 8以下版本不支持它们。添加案例后,我们必须检查是否可以评估特定策略,此处是使用生物识别技术对其设备进行身份验证。 该块完成后,我们可以运行评估策略以获取用户身份验证/同意。 用户验证后,继续修改UI或执行操作。 等待,如果成功进行身份验证,如果要更新UI部件,请记住始终使用DispatchQueue.main.async运行这些任务。 UI更改必须在主线程中运行。 这是代码, //此框架包含身份验证帮助程序代码 导入LocalAuthentication 类ViewController:UIViewController { @IBAction func touchIdAction(_发件人:UIButton){ 打印(“您好!!。您已经单击了触摸ID”) 让myContext = LAContext() let myLocalizedReasonString =“生物特征认证测试!” var authError:NSError? 如果#available(iOS 8.0,macOS 10.12.1,*){ 如果myContext.canEvaluatePolicy(.deviceOwnerAuthenticationWithBiometrics,错误:&authError){ myContext.evaluatePolicy(.deviceOwnerAuthenticationWithBiometrics,localizedReason:myLocalizedReasonString){成功,在 DispatchQueue.main.async { 如果成功{ //用户验证成功,请采取适当的措施 self.successLabel.text =“太好了!…用户成功通过身份验证” }其他{ //用户未成功通过身份验证,请查看错误并采取适当的措施 self.successLabel.text […]

今日扩展iOS Swift 5

标记:标记: Создаемновый 字符串文件 Называемего,допустим, InfoPlist。 Выбираемнашновыйфайлинажимаем, 本地化… Далеевыбираем,например,俄语 Послечегоставимгалочкунапротив 英语 Должнополучитсявоттак: Итеперь,наконецлокализуем

将图像下载并上传到Firebase / With Swift 4

大家好,这是我的第一个故事,我将分享每个人都需要的东西。您可以学习如何使用Swift 4将图像或其他文件保存到Firebase存储中。 首先,您必须在ios应用程序的Firebase中创建一个项目。之后,您将在podfile中添加“ pod Firebase / Storage”,然后进行pod安装。现在,在视图控制器中导入“ Firebase / Storage”库。您可以编写这些代码将图片文件上传到Firebase。 让存储= Storage.storage() var data = Data() 数据= UIImagePNGRepresentation(“锁定”)! //图片文件名 //根据我们的存储服务创建存储参考 让storageRef = storage.reference() var imageRef = storageRef.child(“ images / lock.png”) _ = imageRef.putData(data,元数据:无,完成:{(metadata,error)in 保护元数据=其他元数据{ 打印(错误) 返回 } 让downloadURL = metadata.downloadURL() 打印(downloadURL) })

在Swift中探索范围类型

Swift 3版本附带的许多很棒的功能之一是Swift标准库中的Range API,自那时以来,它一直在不断改进。 在此之前,我们只有NSRange,它是Foundation框架的一部分。 在今天的文章中,我将尝试解释有关Range,ClosedRange,PartialRangeUpTo,PartialRangeThrough和CountableRange的知识,所有这些类型的范围之间的区别以及如何使用它们。 所以…开始吧 首先,让我们讨论范围,然后再探讨其他范围。 从Apple标准库提供的文档范围是… 一个可比类型的半开间隔,从下限到上限(但不包括上限)。 范围类型具有Bound泛型类型,可以是符合Comparable协议的任何类型。 这意味着您可以使用Int,Double,String…甚至您自己的自定义类型创建范围,因为它们符合Comparable协议。 从Apple标准库文档中,ClosedRange是… 从下限到上限(包括上限)的可比较类型上的间隔。 Range和ClosedRange之间的唯一区别是ClosedRange包含上限。 根据Apple标准库文档,CountableRange是… 从Swift 4.1开始,只是Range 的类型别名,其中Bound符合Strideable和Bound.Stride符合SignedInteger。 正如您将在下面在类型别名的定义中看到的那样。 通过利用条件一致性,Range符合Sequence,Collection,BidirectionalCollection,RandomAccessCollection,其中Bound符合Strideable和Bound.Stride符合SignedInteger,即CountableRange。 如您所见,标准库源中的条件一致性定义位于stdlib / public / core / Range.swift上 因此,您可以将范围用作集合,并可以使用距离,索引,反向,映射,过滤器等功能…… 相同的规则应用于CountableClosedRange ,不同之处是ClosedRange 的类型别名,对Strideable和Bound应用相同的一致性。对SignedInteger约束的跨度一致性。 现在,上限已包含在集合中。 OBS:仅进行了数组转换,因此我们可以在操场上看到范围和封闭区域已经是Collection。 再次…… 根据Apple标准库文档,PartialRangeUpTo是… 部分半开间隔,但不包括上限。 与Range相同,但只有上限。 再一次 … 从Apple标准库文档中可以找到PartialRangeThrough… 部分半开间隔,直到并包括一个上限。 与ClosedRange相同,但是只有上限。 我发誓这是最后一个…… 根据Apple标准库文档,PartialRangeFrom是… 从下限向上延伸的部分间隔。 与ClosedRange相同,但只有下限。 协议RangeExpression是所有这些类型的范围都遵循的协议之一,它定义了一个名为contains的方法,该方法可以验证值是否包含在范围内。 也有〜=运算符执行相同的检查。 如您所见,它非常简单而且非常有用。 如果您好奇并想了解如何在后台实现这些类型,可以在Swift的Repo的stdlib / public / core / […]

我怎样才能parsing每个项目到它的uicollection视图单元格

所以下面是我的parsingJSON并将其放入一个集合视图单元格的代码 import UIKit let cellId = "cellId" struct AnimeJsonStuff: Decodable { let data: [AnimeDataArray] } struct AnimeLinks: Codable { var selfStr : String? private enum CodingKeys : String, CodingKey { case selfStr = "self" } } struct AnimeAttributes: Codable { var createdAt : String? var slug : String? let synopsis: String? private enum CodingKeys : […]

RXSwift绑定返回意外地发现零,而解包一个可选的值

我是MVVM和RxSwift的初学者,我想在我的下一个项目中实现它。 目前,我正在处理我的login模块,一切都看起来不错,但每次运行我的应用程序时,它会触发一个错误时绑定文本字段到我的ViewModel说“意外地发现零,而解包可选值”。 有人能帮我摆脱它吗? 以下是我如何做到的: class LoginViewController: UIViewController { @IBOutlet weak var emailTextField: UITextField! @IBOutlet weak var passwordTextField: UITextField! @IBOutlet weak var loginButton: UIButton! private var loginViewModel: UserLoginViewModel! private let disposeBag = DisposeBag() override func viewDidLoad() { super.viewDidLoad() emailTextField.rx.text.orEmpty .bind(to: loginViewModel.emailAdd) .disposed(by: disposeBag) <—- Displays "Unexpectedly found nil while unwrapping an Optional value" passwordTextField.rx.text.orEmpty .bind(to: loginViewModel.password) […]

如何在Ios中添加一个customView xib作为注释?

当我使用googlemaps所有我必须做的是 let marker = GMSMarker() marker.position = postions.target marker.title = "TEST" marker.map = self.mapView let myCustomView:CustomView = UINib(nibName: "CustomView", bundle: nil).instantiate(withOwner: nil, options: nil)[0] as! CustomView marker.iconView = myCustomView 但是如果我使用MAPKIT,我将如何实现这一点。 Mycustomview是我创build的xib视图文件。

如何在Core Data中使用Swift 4 Codable?

Codable似乎是一个非常令人兴奋的function。 但是我想知道我们如何在Core Data中使用它? 特别是,是否有可能直接编码/解码从/到NSManagedObject JSON? 我尝试了一个非常简单的例子: 并自己定义了Foo : import CoreData @objc(Foo) public class Foo: NSManagedObject, Codable {} 但是像这样使用它: let json = """ { "name": "foo", "bars": [{ "name": "bar1", }], [{ "name": "bar2" }] } """.data(using: .utf8)! let decoder = JSONDecoder() let foo = try! decoder.decode(Foo.self, from: json) print(foo) 编译器因此错误而失败: super.init isn't called on all […]

创build相册的过滤PHAssetCollection失败

我需要创build一个过滤的SmartAlbums集合在UITable中显示。 我以前曾尝试过将未过滤的集合转换为可变forms,并删除我希望排除的那些,然后重新回到PHFetchResult。 所有这些尝试都失败了。 我现在正尝试使用PHFetch选项来过滤专辑(“ https://developer.apple.com/documentation/photos/phfetchoptions )”中的“localizedTitle”键。 但是,当我尝试尝试排除“Videos”智能文件夹的以下testing用例代码时,我在newAlbums中得到零计数结果。 当我将谓词设置为%K ==%@时,我也得到零结果。 正确答案应该是前者15,后者是1。 为什么我的谓词不能select正确的结果? 我不希望将新的集合保存到库中,只是将其用于临时显示,所以我没有尝试请求调用(也许我误解了这个框架?) 我search了S / O和developer.apple,工作代码的唯一例子是过滤单个媒体(照片或video),而不是selectsmartAlbums。 let fetchOptions = PHFetchOptions() let p1 = NSPredicate(format: "%K == %@", "localizedTitle", "Videos") fetchOptions.predicate = p1 let newAlbums = PHAssetCollection.fetchAssetCollections(with: .smartAlbum, subtype: .albumRegular, options: fetchOptions)

Swift可解码的可选键

(这是这个问题的一个后续: 使用具有多个键的可解码协议 。) 我有以下的Swift代码: let additionalInfo = try values.nestedContainer(keyedBy: UserInfoKeys.self, forKey: .age) age = try additionalInfo.decodeIfPresent(Int.self, forKey: .realage) 我知道,如果我使用decodeIfPresent并没有该属性,它仍然会正确处理它,如果它是一个可选的variables。 例如,下面的JSON使用上面的代码来parsing它。 { "firstname": "Test", "lastname": "User", "age": {"realage": 29} } 而下面的JSON也适用。 { "firstname": "Test", "lastname": "User", "age": {"notrealage": 30} } 但以下不起作用。 { "firstname": "Test", "lastname": "User" } 我怎样才能使所有3个例子工作? 对于nestedContainer有没有类似nestedContainer ?