草庐IT

swift - 如何修复Xcode 8.3 'if let' 语句中类型转换的警告?

考虑以下代码:letnsdate:NSDate?=NSDate()ifletdate=nsdateas?Date{//awarningoccurshereprint(date)}编译器这样提示:Conditionaldowncastfrom'NSDate?'到“日期”是一个桥接转换;您是要使用“as”吗?从NSData到Data的转换有同样的问题。如何解决? 最佳答案 尝试转换为可选的日期:ifletdate=nsdateasDate?您正在尝试将optionalNSDateoptional转换为NONoptionalDate。只要

Swift - 使用可选的 let

我正在学习Swift。在第一印象中,我看不出将常量(没有初始存储值)声明为类中的可选值有任何意义例如:letuserName:String?因为默认初始化程序会将其分配给nil并且随后无法更改(因为它是常量)。据我了解,自定义初始化程序仍然可以为其分配一个非零值,但在那种情况下,您不可以将其声明为letuserName:String(即非可选)我原以为如果这是一个冗余模式,Apple会提到它,但我看不到他们有。那么在什么情况下会使用或有用Optional常量声明呢? 最佳答案 可选常量需要在初始化过程中赋值。该值可以是零,或其他一些

Swift for in loop : use var get warning to use let, use let get 错误

我在swift文件中有以下代码:functestDictionary(dict:Dictionary){varstr=""forvarkeyindict.keys{str+=key+":"+dict[key]!.description+"\n"}self.alert("Dict",message:str)}以上代码在for循环中对var的用户产生警告,即:Variable'key'wasnevermutated;considerchangingto'let'constant然而,当我将var更改为let时,出现以下错误:'let'patterncannotappearnestedina

swift - 避免在 Swift 中连续声明 "if let"

这个问题在这里已经有了答案:Usingmultiplelet-aswithinaif-statementinSwift(3个答案)关闭5年前。在Swift中,我使用iflet声明来检查我的对象是否不是nilifletobj=optionalObj{}但有时,我不得不面对连续的iflet声明ifletobj=optionalObj{ifleta=obj.a{ifletb=a.b{//dostuff}}}我正在寻找一种方法来避免连续的iflet声明。我会尝试类似的东西:ifletobj=optionalObj&&ifleta=obj.a&&ifletb=a.b{//dostuff}但是sw

swift - if nil != optional ... 和 if let _ = optional ... 之间有什么区别?

我需要测试返回可选值的表达式是否为nil。这看起来很简单,但这是代码。ifnil!=self?.checklists.itemPassingTest({$0===note.object}){…}出于某种原因,我觉得这看起来很不愉快。ifletitem=self?.checklists.itemPassingTest({$0===note.object}){…}对我来说看起来好多了,但我实际上并不需要该元素,我只需要知道是否有返回。所以,我使用了以下内容。iflet_=self?.checklists.itemPassingTest({$0===note.object}){…}我是不是漏

swift - 懒惰的 Var 与 Let

我想在Swift中对我的一些属性使用延迟初始化。我当前的代码如下所示:lazyvarfontSize:CGFloat={if(someCase){returnCGFloat(30)}else{returnCGFloat(17)}}()问题是,一旦设置了fontSize,它就永远不会改变。所以我想做这样的事情:lazyletfontSize:CGFloat={if(someCase){returnCGFloat(30)}else{returnCGFloat(17)}}()这是不可能的。只有这个有效:letfontSize:CGFloat={if(someCase){returnCGFlo

swift - 如果 "static"关键字用于在 swift 中定义常量/不可变,那么 "let"关键字有什么用?

我对在swift中使用static关键字有点困惑。正如我们所知,swift引入了let关键字来声明不可变对象(immutable对象)。就像声明一个TableView单元格的id一样,它很可能在其生命周期内不会改变。现在在某些结构声明中使用static关键字有什么用:structclassConstants{staticlettest="test"staticvartotalCount=0}而let关键字做同样的事情。在ObjectiveC中,我们使用static来声明一些常量,例如staticNSString*cellIdentifier=@"cellId";除了让我更好奇的是sta

ios - 在 Swift 中 if let 赋值中 where 的用法

Swift手册第61页的Swift文档暗示了使用where将可选绑定(bind)与常规条件连接起来的可能性。然而,当我这样做时,我收到一条警告,建议我将where替换为逗号,如下面的代码:ifletgeocodingError=erroras?NSErrorwheregeocodingError.code==2 最佳答案 在Swift3中,这种语法发生了变化。什么是ifletx=y,a=bwherea==x{现在如果让x=y,让a=b,a==x{理由是if...{的每个子句现在都是一个独立的bool测试。查看XcodeRelease

ios - 为什么我不能在 Swift 中使用 let in 协议(protocol)?

我对Swift中关于var和关键字{getset}的使用的协议(protocol)有疑问。来自Appledocumentation:Ifaprotocolrequiresapropertytobegettableandsettable,thatpropertyrequirementcannotbefulfilledbyaconstantstoredpropertyoraread-onlycomputedproperty.Iftheprotocolonlyrequiresapropertytobegettable,therequirementcanbesatisfiedbyanykind

swift - 使用带有逻辑 AND 运算符 && 的 Swift if let

我们知道我们可以使用iflet语句作为简写来检查可选的nil然后展开。但是,我想使用逻辑AND运算符&&将它与另一个表达式结合起来。因此,例如,在这里我执行可选的链接以展开并可选地将我的rootViewController向下转换为tabBarController。但我不想使用嵌套的if语句,而是想将它们组合起来。iflettabBarController=window!.rootViewControlleras?UITabBarController{iftabBarController.viewControllers.count>0{println("dostuff")}}联合捐赠: