草庐IT

ios - 如何同时使用带有可选和扩展的@objc 协议(protocol)?

这段代码无法编译,听起来可能很愚蠢,但我会解释为什么它如此重要!@objcprotocolp{optionalfuncf1()funcf2()}extensionp{funcf1(){}funcf2(){}}classfoo:p{}编译器说Typecdoesnotconformtoprotocol'p'这可能是因为你不能同时使用@objc可选和扩展(在这种情况下也没有意义).但请考虑以下示例:我想在我的扩展中的协议(protocol)中定义的非可选方法上设置一个选择器(我使用@objc的主要原因):funcf1(){}->funcf1(){...#selector(Self.f2)..

swift - 可以在变量声明中创建 AVAudioPlayer() 并避免可选/解包吗?

我正在播放存储在iOS应用程序Assets目录中的mp3文件,当我在应用程序范围内声明播放器时,我正在声明我的AVAudioPlayer。我的代码工作正常,但我想知道这是否是不好的做法,如果是,为什么。大多数播放音频的代码示例将AVPlayer声明为可选,但不在声明时创建播放器,如下所示:varaudioPlayer:AVAudioPlayer?我在下面实现的b/c没有任何对可选值或强制解包的引用(我自己只是在Swift中逐步提升,但我将其用作我的学生的早期“GetExcited”示例,因此他们可以在他们的第一个应用程序中播放媒体。希望将可选讨论推迟到以后)。//声明AVAudioPl

ios - FirebaseUI: fatal error :使用 Storyboard和 UI 标签展开可选值时意外发现 nil

在使用FirebaseUI时,我试图为来自Firebase的数据实现自定义单元格。我想在单元格中有一些自定义标签,如下所示:这是我的CollectionViewController的样子:importUIKitimportFirebaseimportFirebaseDatabaseUIprivateletreuseIdentifier="Cell"classShowDogsCollectionViewController:UICollectionViewController{letfirebaseRef=FIRDatabase.database().reference().child(

ios - 可选类型 'NSIndexPath?' 的值未展开;您是要使用 '!' 还是 '?' ?

我的代码有这个问题,我认为问题是在我将语法更改为新的swift版本后出现的。importUIKitclassFirstTableViewController:UITableViewController{varFirstTableArray=[String]()varpassThisArray=[String]()overridefuncviewDidLoad(){super.viewDidLoad()//Thisarraywilldisplayonyourtableviewcell.FirstTableArray=[lib1]//Youcanpasselementofthisarray

swift - 具有可选值的自定义运算符

我是Swift的新手,正在为NSDecimalNumber制作自定义速记运算符,如下所示://Non-Optstaticfunc+(left:NSDecimalNumber,right:NSDecimalNumber)->NSDecimalNumber{returnleft.adding(right)}staticfunc-(left:NSDecimalNumber,right:NSDecimalNumber)->NSDecimalNumber{returnleft.subtracting(right)}staticfunc*(left:NSDecimalNumber,right:NS

swift - 可选绑定(bind)评估可选(nil)的不需要的行为

将xCode更新到版本10(和swift4.2)后,我在可选绑定(bind)上有一个奇怪的行为代码如下,是读取json文件,T是泛型(这里是String)//AretherevaluesforconfigName?ifletvalues=cfg[configName]as?[String:Any]{print("0-values[langCode!]=",values[langCode!]??"null")print("1-values[langCode!]as?T=",values[langCode!]as?T)//isthereavalueforlangCode?ifletvalu

swift - 根据 Swift 中的可选字符串属性对自定义对象数组进行排序

我正在尝试快速对类型为“ObjCClass”的数组进行排序,这是一个objective-c类。'ObjCClass'具有属性'name',它是String类型的可选属性。我想根据“名称”属性按升序对数组中的对象进行排序。如果不强制展开,我怎么能做到这一点?我试过用这个:varsortedArray=unsortedArray.sorted(by:{$0.nameasString!我一直在尝试使用guard和if/let语句来检查属性“name”是否存在,但我一直遇到错误,因为我认为我做的不正确。如何检查数组中每个对象的属性是否存在,然后进行排序? 最佳答案

ios - Swift - NSDictionary 可选值崩溃

letdataArray=jsonDict["results"]asNSArray;foritemindataArray{letobj=itemasNSDictionaryvardestination:String=obj["destination"]asString!println(destination)}上面我有一个正在循环的NSArray,它是通过解析JSON文件获得的。我的问题是,我可以看到一些输出,其中println成功但应用程序在循环时崩溃。我很确定这是因为我处理NSDictionary可选值的方式,但我不确定如何解决它。我是否需要在打印之前检查可选值或类似的内容?有什么

cocoa - 可选类型和 UIDynamicAnimator 的问题

我正在阅读O'Reilly的SwiftDevelopmentwithCocoa并收到以下错误:BoundvalueinaconditionalbindingmustbeofOptionaltype针对以下代码:importUIKitclassViewController:UIViewController{@IBOutletweakvarimageView:UIImageView!vardynamicAnimator=UIDynamicAnimator()overridefuncviewDidAppear(animated:Bool){super.viewDidAppear(animat

swift - 进行可选链接的好方法

我目前在我的代码中这样做是为了处理可选项...我做一个fetchedResultController.performFetch(nil)letresults=fetchedResultController.fetchedObjectsas[doesnotmatter]//addallitemstoserverthathavenouidforresultinresults{letuid=result.valueForKey("uid")asString?ifuid==nil{letname=result.valueForKey("name")asString?lettrainingday