any类型怎么处理 swift
2016-03-22 20:27:40 u014600626 阅读数 403

AnyAnyObject的类型转换                                                  Swift为不确定类型提供了两种特殊类型别名:

  • AnyObject可以代表任何class类型的实例。
  • Any可以表示任何类型,除了方法类型(function types)。


注意:
只有当你明确的需要它的行为和功能时才使用AnyAnyObject。在你的代码里使用你期望的明确的类型总是更好的。
 

AnyObject类型

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         当需要在工作中使用 Cocoa APIs,它一般接收一个AnyObject[]类型的数组,或者说“一个任何对象类型的数组”。这是因为 Objective-C 没有明确的类型化数组。但是,你常常可以确定包含在仅从你知道的 API 信息提供的这样一个数组中的对象的类型。

在这些情况下,你可以使用强制形式的类型转换(as)来下转在数组中的每一项到比 AnyObject 更明确的类型,不需要可选解析(optional unwrapping)。

下面的示例定义了一个 AnyObject[] 类型的数组并填入三个Movie类型的实例:

let someObjects: AnyObject[] = [
    Movie(name: "2001: A Space Odyssey", director: "Stanley Kubrick"),
    Movie(name: "Moon", director: "Duncan Jones"),
    Movie(name: "Alien", director: "Ridley Scott")
]

因为知道这个数组只包含 Movie 实例,你可以直接用(as)下转并解包到不可选的Movie类型(ps:其实就是我们常用的正常类型,这里是为了和可选类型相对比)。

for object in someObjects {
    let movie = object as Movie
    println("Movie: '\(movie.name)', dir. \(movie.director)")
}
// Movie: '2001: A Space Odyssey', dir. Stanley Kubrick
// Movie: 'Moon', dir. Duncan Jones
// Movie: 'Alien', dir. Ridley Scott

为了变为一个更短的形式,下转someObjects数组为Movie[]类型来代替下转每一项方式。

for movie in someObjects as Movie[] {
    println("Movie: '\(movie.name)', dir. \(movie.director)")
}
// Movie: '2001: A Space Odyssey', dir. Stanley Kubrick
// Movie: 'Moon', dir. Duncan Jones
// Movie: 'Alien', dir. Ridley Scott

Any类型

这里有个示例,使用 Any 类型来和混合的不同类型一起工作,包括非class类型。它创建了一个可以存储Any类型的数组 things

var things = Any[]()

things.append(0)
things.append(0.0)
things.append(42)
things.append(3.14159)
things.append("hello")
things.append((3.0, 5.0))
things.append(Movie(name: "Ghostbusters", director: "Ivan Reitman"))

things 数组包含两个 Int 值,2个 Double 值,1个 String 值,一个元组 (Double, Double) ,Ivan Reitman 导演的电影“Ghostbusters”。

你可以在 switch cases里用is 和 as 操作符来发觉只知道是 Any 或 AnyObject的常量或变量的类型。 下面的示例迭代 things数组中的每一项的并用switch语句查找每一项的类型。这几种switch语句的情形绑定它们匹配的值到一个规定类型的常量,让它们可以打印它们的值:

for thing in things {
    switch thing {
    case 0 as Int:
        println("zero as an Int")
    case 0 as Double:
        println("zero as a Double")
    case let someInt as Int:
        println("an integer value of \(someInt)")
    case let someDouble as Double where someDouble > 0:
        println("a positive double value of \(someDouble)")
    case is Double:
        println("some other double value that I don't want to print")
    case let someString as String:
        println("a string value of \"\(someString)\"")
    case let (x, y) as (Double, Double):
        println("an (x, y) point at \(x), \(y)")
    case let movie as Movie:
        println("a movie called '\(movie.name)', dir. \(movie.director)")
    default:
        println("something else")
    }
}

// zero as an Int
// zero as a Double
// an integer value of 42
// a positive double value of 3.14159
// a string value of "hello"
// an (x, y) point at 3.0, 5.0
// a movie called 'Ghostbusters', dir. Ivan Reitman


注意:
在一个switch语句的case中使用强制形式的类型转换操作符(as, 而不是 as?)来检查和转换到一个明确的类型。在 switch case 语句的内容中这种检查总是安全的。
 


2019-04-10 10:53:46 feifeiwuxian 阅读数 110

有时候我们在用swift的时候类型是Any不知道用什么类型解析。

比如支付宝返回的结果字典。

此时,用如下代码来查看真实的类型。

        for (key, value) in resultDic ?? [AnyHashable: Any]() {
            print(key,type(of: value))
        }
        for value in platArr ?? [Any]() {
            print(type(of: value))
        }

 

2017-04-24 19:03:00 weixin_34390105 阅读数 25

泛型和Any都能代表任何类型,用在函数上定义上都能表示接受任意类型的参数。
把本不相关的两样东西扯在一起了,好像还真有点相似...

说重点:
泛型可以用于定义灵活的函数,类型检查仍然由编译器负责;
Any类型则可以避开Swift的类型系统(慎用)。

推荐泛型:
使用泛型允许你无须牺牲类型安全就能够在编译器的帮助下写出灵活的函数。

2016-04-20 14:40:00 weixin_34080951 阅读数 20

Any and AnyObject

1780490-90fd1b77bb1478ab.png
Any and AnyObject
2015-06-16 22:58:44 crazyeveryday 阅读数 373

class ca{

    

}

class cb:ca{

    

}

var library:[Any] = [

ca(),

cb(),

1,

]


for item in library{

    if let intitem = item as? Int{

    println(item);

    }

}

println("-------分界线-------");

var items:[AnyObject]=[

ca(),

cb(),]

for item in items as! [ca]{

    println(item);

}

Swift Any & AnyObject

阅读数 294

没有更多推荐了,返回首页