这两个代码的最大区别是什么?我完全是Swift/编码的初学者:) thx寻求帮助
func hellou(_ name: String = "World") -> String {
return "Hello (name)!"}
func hello(_ name: String? = nil) -> String {
return "Hello, (name ?? "World")!)}
这是一些简单的操场代码,可以演示差异:
import UIKit
func hellou(_ name: String = "World") -> String {
return "Hello (name)!"}
func hello(_ name: String? = nil) -> String {
return "Hello, (name ?? "World")!"
}
var someNonNilOptional:String? = "this is not nil, but it could be"
var someNilOptional:String? // this is nil
var someNonNilString:String = "This string cannot be nil"
// First, all inputs work in the optional method
hello(someNilOptional) // this is fine because hello takes optionals
hello(someNonNilOptional) // this is also fine, because hello takes optionals
hello(someNonNilString) // this too is fine, because a string will work for an Optional(String)
// for the non-optional method, things get more dicey
hellou(someNonNilString) // this is fine, because the parameter is String not String?
hellou(someNonNilOptional!) // this works because we force-unwrap and it wasn't nil
hellou(someNilOptional!) // Fatal error: Unexpectedly found nil while unwrapping an Optional value
hellou(someNonNilOptional) // compile time error
hellou(someNilOptional) // compile time error
有时您不想要可选参数。上面的两个编译时间错误是我希望字符串具有程序员值的好示例,并且编译器确保它们是。