草庐IT

swift - 如何在隐式解包可选上调用 .map()?

Optional有map方法。///If`self==nil`,returns`nil`.Otherwise,returns`f(self!)`.funcmap(f:(T)->U)->U?当我们要转换Int?至UInt64?,我们可以:letiVal:Int?=42leti64Val=iVal.map{UInt64($0)}代替:vari64Val:UInt64?ifletiVal=iVal{i64Val=UInt64(iVal)}在这里,ImplicitlyUnwrappedOptional有相同的方法:///If`self==nil`,returns`nil`.Otherwise,

ios - 如何在 Swift 协议(protocol)可选函数中使用枚举作为参数

我在Swift中有这个枚举enumDirection:Int{caseLeft2Right=0,Right2Left}还有这个协议(protocol)@objcprotocolCellDelegate:NSObjectProtocol{optionalfunchas(direction:SwipeDirection)->Bool}我收到这个错误方法不能被标记为@objc,因为参数的类型不能在Objective-C中表示谁能告诉我为什么会出现此错误以及如何解决?谢谢! 最佳答案 @objc属性使协议(protocol)与Objecti

swift - 如果在 Swift 中可选向下转型失败,你能继续循环吗?

如果元素上的某些条件失败,继续循环是一个非常常见的习惯用法。假设我们想对特定类型的所有subview做一些事情(并且,出于某种原因,不想回避类型的事情)。理想情况下,我们会写:forviewinself.subviewsas[NSView]{//castrequiredinbeta6if(letspecificView=viewas?SpecificView)==nil{//上面的代码因“模式变量绑定(bind)不能出现在表达式中”而失败,如thisquestion.但是,这似乎是一种常见的模式,必须在Swift中做到这一点。我错过了什么吗?编辑:现在我想起来了,这似乎违反了iflet

ios - 为什么 Apple 可以声明不带@objc 的可选协议(protocol)函数和无主可选变量,而我不能?

我不确定如何在swift中声明委托(delegate)。所以我检查了Apple的UITableView的代码(通过命令+单击XCode中的UITableView),发现了一些奇怪的东西。以下是UITableView委托(delegate)的声明:代表是一个unowned(unsafe)optionalvalue,但是根据Apple'sdoc:据说anunownedreferenceisassumedtoalwayshaveavalue但是,委托(delegate)当然可以为nil,即没有值。事实上,委托(delegate)被声明为UITableViewDelegate?,这是一个可选值

swift - 检查可选的 isEqualToString

我有一个案例,我想检查我拥有的一个可选值是否等于一个字符串。首先我必须打开它来检查它是否存在,然后我想检查它是否等于另一个字符串。但是,这给了我一个问题,我必须两次编写相同的代码。我给你举个例子:varperson:Person=Person()ifletname=person.name{ifname.isEqualToString("John"){println("Hello,John!")}else{println("Waitaminute,you'renotJohn!")}else{println("Waitaminute,you'renotJohn!")}如您所见,我必须将el

Swift,可选的包装器。 "?" "!"我明白它是如何工作的。但为什么它比 != nil 检查更好

我理解“!”或者”?”作品。但我不太确定与!=nil检查相比有什么额外好处。移动到“!?”的额外好处是什么?我觉得这只是苹果添加的东西,但与iOS的现状相比,看不到额外的好处。我在这里错过了什么吗?提前致谢。 最佳答案 检查nil和要求一个可选的被解包之间的区别可能等于你的代码崩溃与否之间的区别。如果使用得当,可选项既可以提高安全性,也可以让您的代码更具可读性。假设你有一个数组,你想取出其中的第一个值。你可以这样做:if!arr.isEmpty{useValue(arr[0])}当然,很容易忘记isEmpty部分,如果您忘记了,您的

Swift 可选类型 : how . None == nil 有效

我想了解它是如何工作的:1>funcreturnNone()->String?{return.None}2>returnNone()==nil$R0:Bool=true3>returnNone()==.None$R1:Bool=true为什么.None等于nil。我在枚举定义中没有看到任何关于它的内容:publicenumOptional:_Reflectable,NilLiteralConvertible{caseNonecaseSome(Wrapped)///Constructa`nil`instance.publicinit()///Constructanon-`nil`inst

ios - 可选绑定(bind)与尝试?并作为?仍然产生可选类型

我有用于执行NSFetchRequest并将其结果转换为我的自定义数据模型类型的数组的代码。获取可能会抛出错误,但我不想关心错误,所以我使用try?,并且我还在转换中使用as?。在Swift2中,这曾经很好,但Swift3产生了一个双可选:varexpenses:[Expense]?{letrequest=NSFetchRequest(entityName:Expense.entityName)request.predicate=NSPredicate(format:"dateSpent>=%@ANDdateSpent如何在iflet中重新表述我的可选绑定(bind)的右侧,以便它的类

ios - 如何将 Swift 可选的 NSNumber 转换为可选的 Int? (我的代码有什么改进吗?)

在Swift中将OptionalNumber转换为OptionalInt的最短/最干净的方法是什么?还有比这更好的方法吗?(见下文)letorderNumberInt:Int?ifevent.orderNum!=nil{orderNumberInt=Int(event.orderNum!)}else{orderNumberInt=nil} 最佳答案 我认为最简单的方法是varorderNumberInt=orderNum?.intValue你也可以这样做varorderNum:NSNumber?=NSNumber(int:12)va

swift - 将 swift 变量包装在可选变量中的简写?

Swift允许我们使用简写符号str!来解包一个可选的。但是,如果我们想做相反的事情怎么办?假设我有一个变量:varstr=String()//String是否有任何速记符号将其转换为可选(即String?或String!)?(例如,我想做类似varstrOptional=?(str)的事情。)或者,如果此表示法没有简写形式,我如何在不明确提及其类型的情况下将其转换为可选项(例如,我不想提及String)。换句话说,我知道我可以使用以下任何一种方法将变量包装为可选:varstrOptional=strasString?varstrOptional:String?=strvarstrOp