草庐IT

ios - 如何避免以正确的方式使用单例?

我想重构我的代码以应用干净的方法。我有一个类userclassUser{letname:String?letid:StringvarisOnline:BoolvarmesaageHistory=[Message]()init(name:String,id:String,isOnlineStatus:Bool){self.name=nameself.id=idself.isOnline=isOnlineStatus}}然后我使用结构模式来创建我的用户列表。protocolCreateUserProtocol:class{funcsortArray(inputArr:[User])}cla

ios - 如何避免 HTTP 状态代码 : 503

我尝试在使用的swift和服务器端AKKA框架中访问其余api调用URLSession。我经常收到503错误。我搜索了很多东西,大部分结果都说这是服务器端问题。我已经在postman和JMeter并发测试中进行了测试,不会遇到任何问题(错误代码503)。我希望503不会因为服务器端问题而出现。letheaders=["content-type":"application/json","access-token":"3ccecc61-1fc5-4f54-88d5",]letparameters=["s3url":"https://s3-us-west-1.amazonaws.com/im

swift - 如何使用 GCD DispatchWorkItem.notify 避免数据竞争?

在XCode8.3上使用Swift3.1,使用ThreadSanitizer运行以下代码会发现数据竞争(请参阅代码中的写入和读取注释):privatefuncincrementAsync(){letitem=DispatchWorkItem{[weakself]inguardletstrongSelf=selfelse{return}strongSelf.x+=1//DispatchWorkItemdone")}item.notify(queue:.main){[weakself]inguardletstrongSelf=selfelse{return}print(">\(strong

ios - 如何避免以下错误 : AVAudioEngineGraph required condition is false: NULL ! = tap

我搜索了这个错误,但没有发现任何人有同样的错误。我很确定我知道这个错误意味着什么,但我不知道如何避免它。基本上,我通过MultipeerConnectivity接到了一个电话。我正在使用AVAudioEngine录制音频并播放来自对等方的音频。我注意到用户说话的时间与其他设备播放该音频所需的时间之间存在相当大的延迟,但我通过移除水龙头并重新安装它解决了这个问题。这完全消除了任何延迟。但是,有时它会引发错误。我还允许用户将他们的麦克风静音,当他们点击静音时,水龙头被移除。一旦他们点击取消静音,水龙头就会重新安装。有时这也会引发同样的错误:AVAudioEngineGraph.mm:270

ios - 应避免强制转换

我收到“Forcecastviolation:Forcecastsshouldbeavoidedwarning”在我的代码上:daysCombinedFinal=daysCombined[0]as![Any?]截图如下:functableView(_tableView:UITableView,cellForRowAtindexPath:IndexPath)->UITableViewCell{ifletcell=tableView.dequeueReusableCell(withIdentifier:"location",for:indexPath)as?TravelShopCustom

ios - 子类化时避免违反 LSP

在objective-C中,我可以子类化一个ViewController,如下所示。classKeyboardObserverViewController:UIViewController{vartableView:UITableView?init(){super.init(nibName:nil,bundle:nil)NotificationCenter.default.addObserver(self,selector:#selector(KeyboardObserverViewController.keyboardDidShow(_:)),name:NSNotification.

arrays - 在 Swift 中使用委托(delegate)数组时如何避免保留循环

这个问题在这里已经有了答案:UsingasaconcretetypeconformingtoprotocolAnyObjectisnotsupported(6个答案)关闭5年前。在我的一个类(class)中,我使用了一组委托(delegate)(该类(class)是一个单例)。这会导致保留周期。我知道当我只使用一个委托(delegate)时,我可以通过弱化委托(delegate)来避免保留周期。但这不适用于我的委托(delegate)数组。我怎样才能避免这个保留周期。例子:protocolSomeDelegate:class{funcsomeFunction()}我的类(class)c

ios - 快速避免数据竞争条件

当我运行TSan工具时,我的代码中出现竞争条件。由于同时从不同的队列和线程访问了相同的代码,这就是为什么我不能使用串行队列或屏障,因为队列只会阻止访问共享资源的单个队列而不是其他队列。我使用了objc_sync_enter(object)|objc_sync_exit(object)并锁定NSLock()或NSRecursiveLock()以保护共享资源,但这些也不起作用。当我在ObjectiveC中使用@synchronized()关键字来保护共享资源时,它按预期工作正常并且我没有在特定代码块中遇到竞争条件。那么,由于我们不能在Swift语言中使用@synchronized()关键字

swift - 避免在 Swift 中的排序闭包内强制展开

我正在尝试根据可选的Int属性对对象数组进行排序。//sortingeachlanguagearraybasedonmoststarsgroupedDictionariesValueUnwrapped.sort(by:{$0.stars!>$1.stars!})数组的类型是[SingleRepository],SingleRepository有一个可选的Int。星星:Int?我应该如何避免在排序中强制展开? 最佳答案 您正在按降序排序。使用nil合并运算符??安全地展开值并将nil替换为Int.min将项目放在数组的末尾://sor

objective-c - 核心数据或 NSUserDefaults 以避免操纵用户?

保存用户无法操作或查看的数据(例如密码)的最佳方式是什么?NSUserDefaults被保存在Mac上的一个文件中,用户可以操作和查看。核心数据怎么样?这是否也保存在文件中,或者用户是否可以通过某种方式查看CoreData? 最佳答案 NSUserDefaults绝对不应该用于存储密码,因为它以纯文本形式存储。核心数据可以加密,但默认情况下不是。它将所有数据存储在一个非常易于阅读的SQLite数据库中。密码应存储在系统钥匙串(keychain)中。可以使用SecurityFramework访问钥匙串(keychain).有几个库可以