C言語関数のポインタ型(引き数、戻り値)がなぜ有値オプショナル型
swiftからC言語の関数を使用するときに、ポインタ型の引数、戻り値がある場合、
インターフェイスは、有値オプショナル型となっていますが、なぜでしょうか?
例えば、次の関数のようなことです。
func time(_: UnsafeMutablePointer<time_t>!) -> time_t
func localtime_r(_: UNsafePointer<time_t>!, _: UnsafeMutablePointer<tm>!)->UnsafeMutablePointer<tm>!
例えば、time関数は、引き数にnilを与えることができます。
オプショナル型なので当たり前ですが。。。
だったら、標準のオプショナル型の方が理屈に合いそうです。
var current = time(nil)
また、localtime_r関数の戻り値は、有値オプショナル型ですが、
受け側としては、標準的なオプショナル型または、非オプショナル型で受けれると思いますが、
有値オプショナル型が戻り値なので、非オプショナル型で受け取っても安全だと言いたいのでしょうか。それだと、time関数の引数はの意味は???
なぜ、C言語関数のポインタに対する型が、標準のオプショナル型が使用されないのかを教えてください。