Od REPL
xcrun swift
1> import Foundation
2> var test = ["a", "b", true, "hi", 1]
test: __NSArrayI = @"5 objects" {
[0] = "a"
[1] = "b"
[2] =
[3] = "hi"
[4] = (long)1
}
3>
widać test
jest NSArray
, który jest rodzajem AnyObject[]
lub NSObject[]
Co dzieje, że Foundation
zapewnia możliwość konwersji numeru i Boolean w NSNumber
. Kompilator wykona konwersję, gdy będzie to wymagane do kompilacji kodu.
więc mają teraz wspólny typ NSObject
a zatem wywnioskować jak NSArray
Twój kod nie skompilować w REPL bez import Foundation
.
var test = ["a", "b", true, "hi", 1]
<REPL>:1:12: error: cannot convert the expression's type 'Array' to type 'ArrayLiteralConvertible'
var test:Array = ["a", "b", true, "hi", 1]
<REPL>:4:18: error: cannot convert the expression's type 'Array' to type 'ExtendedGraphemeClusterLiteralConvertible'
ale można to zrobić
var test : Any[] = ["a", "b", true, "hi", 1]
Bo one mają wspólny typ, który jest Any
.
Uwaga: AnyObject[]
nie będzie działać bez import Foundation
.
var test:AnyObject[] = ["a", "b", true, "hi", 1]
<REPL>:2:24: error: type 'Bool' does not conform to protocol 'AnyObject'
To znaczy, AnyObject? – Boon
AnyObject jest typem – juniperi
Czy istnieje sposób sprawdzenia wywnioskowanego typu tablicy? – Boon