Can I do dynamic casting?


(CK TUNG) #1

Since Array is a generic struct, the compiler needs know which type to use as the generic parameter.

What I think is do something like this below

let array:Array<Int> = [1,2,3,4,5]
let dictionary:[String:Any] = ["numbers":array]

if let value = dictionary["numbers"] {
let type = value.dynamicType
print(type)
if let numbers = value as? Array<Int> {
print(numbers + [99])
}
else if let numbers = value as? Array<String> {
print(numbers + ["99"])
}
}

Thanks, Jordan. Is there any other way to do that?

Zhaoxin

Zhaoxin,

You are trying to cast to a type which is defined by a variable at runtime.
Casting with `as` is done at compile-time. The variable has no defined value at this time.

The compiler cannot infer what the value of a variable is going to be.
It can only infer types by static analysis.

Regards
Johan

ยทยทยท

On Aug 25, 2016, at 08:39 PM, Zhao Xin via swift-users <swift-users@swift.org> wrote:
On Thu, Aug 25, 2016 at 6:40 PM, Johan Segerfeldt <Johan.Segerfeldt@fiwe.se> wrote:

Is that possible to do dynamic casting?

My code:

>
> importFoundation
>
> letarray = [1,2,3,4,5]
>
> letdictionary:[String:Any] = ["numbers":array]
>
> ifletvalue =dictionary["numbers"] {
>
> lettype = type(of: value)
>
> print(type)// Array<Int>
>
> letnumbers = valueas!Array<Int>// [1, 2, 3, 4, 5]
>
> //let numbers2 = value as! type // error: use of undeclared type 'type'
>
> }
>
As you can see, the dynamic casting leads an error. Is there a way to do this? Thanks.

Zhaoxin

_______________________________________________
swift-users mailing list
swift-users@swift.org
https://lists.swift.org/mailman/listinfo/swift-users