Swift:String 不能为 nil,那为啥 stringByAddingPercentEncodingWithAllowedCharacters 可以为 nil? [复制]
Posted
技术标签:
【中文标题】Swift:String 不能为 nil,那为啥 stringByAddingPercentEncodingWithAllowedCharacters 可以为 nil? [复制]【英文标题】:Swift: String can't be nil, so why can stringByAddingPercentEncodingWithAllowedCharacters be nil? [duplicate]Swift:String 不能为 nil,那为什么 stringByAddingPercentEncodingWithAllowedCharacters 可以为 nil? [复制] 【发布时间】:2015-11-14 12:56:11 【问题描述】:我对 Swift 比较陌生,我一直在研究可选变量。这是我遇到的问题:
func escape(s: String) -> String
if s == nil
return ""
return s.stringByAddingPercentEncodingWithAllowedCharacters(.URLHostAllowedCharacterSet())
编译器抱怨:
Value of type 'String' can never be nil, comparison isn't allowed
这是对if s == nil
行的引用。如果我删除 if 语句行并且只有返回值行,我会收到错误:
Value of optional type 'String?' not unwrapped; did you mean to use '!' or '?'
我在文档中看到 stringByAddingPercentEncodingWithAllowedCharacters 返回一个字符串?范围。我不明白为什么这不被强迫成为一个字符串?由于String不能为nil,所以我不能将nil传递给这个函数,那么它如何返回nil呢?
【问题讨论】:
这是***.com/q/33558933/292145的副本 【参考方案1】:您将参数s
定义为非可选String
。
非可选类型永远不能为零,这就是编译器抱怨的原因。
只需删除对nil
的检查即可。
您将返回类型定义为非可选的String
。
要么你必须解开结果值以符合类型
func escape(s: String) -> String
return s.stringByAddingPercentEncodingWithAllowedCharacters(.URLHostAllowedCharacterSet())!
或将返回类型更改为可选
func escape(s: String) -> String?
return s.stringByAddingPercentEncodingWithAllowedCharacters(.URLHostAllowedCharacterSet())
【讨论】:
【参考方案2】:发布后不到一分钟,我就深入阅读了文档。 stringByAddingPercentEncodingWithAllowedCharacters 可以返回一个 nil 值,即使给定一个非 nil 值。来自https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/#//apple_ref/occ/instm/NSString/stringByAddingPercentEncodingWithAllowedCharacters
返回值 返回编码后的字符串,如果转换则返回 nil 是不可能的。
讨论 UTF-8 编码用于确定正确百分比 编码的字符。不能对整个 URL 字符串进行百分比编码。
【讨论】:
以上是关于Swift:String 不能为 nil,那为啥 stringByAddingPercentEncodingWithAllowedCharacters 可以为 nil? [复制]的主要内容,如果未能解决你的问题,请参考以下文章