[Swift] Any VS AnyObject

本文详细解析了Swift中的AnyObject和NSDictionary的区别、用途及如何在代码中进行替换,包括字典声明方式、类型拆包和类型判断等核心概念。

当明白 @UIApplicationMain  的内涵段子后,又发现一个神奇的东西

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        
        // Override point for customization after application launch.
        return true
    }

出现了 AnyObject , 这是什么东西,[NSObject:AnyObject] 又是什么东西,感觉怪怪的

完全不适应呀,和之前的beta 版对比会发现社么呢???

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: NSDictionary?) -> Bool {
        
        // Override point for customization after application launch.
        return true
    }

原来是用[NSObject:AnyObject] 来替换 NSDictionary 的,那又是为什么呢,中括号又是干什么的?,“?”又是干嘛的

瞬间疑问更多了,首先是看到官方的解释


哦,原来 AnyObject 是无类型的实例呀,准确来说 Any 是无类型的任何东西的实例,可以使基本数据类型、方法、闭包等

是不是想到了万能的 Id 指针、void 这些东西,而且官方还让在知道类型的时候,不用他们俩,必要时才推荐用。。。

哦,或许会明白 Any、AnyObject 这俩的概念了 [NSObject:AnyObject] 是啥东西,和 NSDictionary 有啥关系呢?

第一反应就是,前者可能是 后者的一种形式,查阅资料才明白,原来是。。。 XXX

字典的声明有这么多:

A: var creditDictionary = Dictionary<String,Int>()  

B: var shorthandDictionary = [String:Int]()  

C: var emptyDictionary = [:] (空字典也可以这样 ~~ OMG ~~)

这样我们就可以简单的理解 [] 就是取 实例的对应的类,然后我们也会见到类似数组的声明

A: var intArray = Array<Int>()  

B: var shorthandArray = [Int]()

C: shorthandArray = [] (这样够空的了。。)

更多关于Swift 中的 NSArray 、NSDictionary 详见喵神:

http://onevcat.com/2014/06/walk-in-swift/

那么对问题有了了解后,? 是干嘛的呢,拆包呀,还有! 呢

详情解释见 代码手工艺人 解释:

http://www.cocoachina.com/swift/20140605/8687.html

最后贴个官方的相关代码吧

AnyObject:

let someObjects: [AnyObject] = [
    Movie(name: "2001: A Space Odyssey", director: "Stanley Kubrick"),
    Movie(name: "Moon", director: "Duncan Jones"),
    Movie(name: "Alien", director: "Ridley Scott")
]
<pre name="code" class="html">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
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: 

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.append({ (name: String) -> String in "Hello, \(name)" })
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)")
    case let stringConverter as String -> String:
        println(stringConverter("Michael"))
    default:
        println("something else")
    }
}
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)")
    case let stringConverter as String -> String:
        println(stringConverter("Michael"))
    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
// Hello, Michael

 

其他相关

喵神贴

http://swifter.tips/any-anyobject/

官方资料

https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/TypeCasting.html






【重要提示】本资源设置为0积分下载,若非0积分请勿轻易下载 亲爱的CSDN用户: 首先感谢你点进这个资源页面。我需要提前说明一个重要情况: 本资源原本已设置为“0积分下载”,即作者希望完全免费共享。但CSDN平台有时会根据文件的下载热度、文件大小、用户权限等因素,自动将部分资源的积分调整为非0数值(如1积分、2积分、5积分等)。这是平台系统的自动行为,而非作者本人的设定。 因此,如果你当前看到该资源的下载所需积分不是0(例如显示为1、2、3……),请谨慎决定是否下载。 如果你按照非0积分支付并下载后发现资源内容不符合预期、链接失效,或者实际上该资源本应是免费的,作者无法为此承担积分损失或退还操作。强烈建议:仅在页面显示为0积分时进行下载。 另外,本资源描述中并未直接提供具体的下载地址或外部链接,因为它本身是一个通过CSDN官方上传通道提交的文件/内容包。如果你看到描述中没有外部网盘地址,这是正常的——资源文件应通过CSDN内置的“下载”按钮获取。若因平台积分显示异常导致你支付了积分,请优先联系CSDN客服咨询积分退还政策,作者没有权限修改平台自动设定的积分值。 感谢你的理解与支持。技术分享本应开放,但受限于平台规则,特此提醒如上。祝学习进步!
内容概要:本文系统介绍了基于去噪概率扩散模型(DDPM)的光伏功率场景生成方法,利用Python代码实现对光伏发电不确定性进行高保真建模与多场景生成。该模型通过模拟光伏出力的时间序列特性,充分捕捉其随机性与间歇性特征,生成具有高度统计一致性和时空相关性的多维场景集,有效支撑含高比例可再生能源的电力系统在规划、调度、风险评估等环节的决策需求。文档不仅详述了DDPM的核心架构与训练流程,还整合了大量相关科研资源,涵盖机器学习、深度学习、信号处理、路径规划、电力系统优化等多个关键技术方向,并提供了丰富的Matlab/Simulink仿真案例与开源代码链接,服务于科研复现与工程应用,突出“借力科研”的理念,强调逻辑思维与技术创新的深度融合。; 适合人群:具备一定编程基础(熟悉Python/Matlab),从事新能源发电、电力系统分析、人工智能应用等相关领域的研究生、科研人员及初级工程技术人员(建议工作年限1-3年)。; 使用场景及目标:①用于光伏功率不确定性建模,支撑微电网优化调度、储能系统配置、鲁棒/分布鲁棒优化等研究;②作为深度生成模型在能源领域落地的典型案例,掌握DDPM等前沿生成式AI模型的设计思想与实际编程实现技巧;③结合文中提供的丰富复现资源,快速构建研究原型,加速科研项目推进与学术论文撰写进程。; 阅读建议:建议读者按照目录结构系统性地浏览内容,优先聚焦与自身研究方向密切相关的模块,结合网盘提供的完整代码与仿真模型进行动手实践,注重理论推导、代码调试与结果分析的有机结合,以深入理解模型内在机制并提升实际应用能力。
本资源提供截至2026年7月全球80000余个机场空间分布数据,系统整合全球民航机场、地区性通用机场及水上飞机起降点等航空基础设施信息,包含可编辑MXD工程文件、标准Shapefile矢量文件以及标准成图TIF文件。数据经过统一整理与标准化处理,空间定位准确、属性结构规范,可直接应用于GIS空间分析、航空运输研究、交通地理分析及科研教学等多种应用场景。 从数据背景来看,机场是全球航空运输网络的重要节点,也是区域经济联系、人员流动和物流运输的重要基础设施。全球机场广泛分布于亚洲、欧洲、北美洲、南美洲、非洲及大洋洲,不同类型机场共同构建了覆盖全球的航空运输体系。其中,民航机场承担定期客货运输任务,地区性通用机场主要服务于通用航空、应急救援、农林作业及飞行培训等需求,而水上飞机起降点则广泛分布于岛屿、湖泊及沿海地区,在偏远地区交通运输中具有重要作用。 在数据内容方面,本资源收录全球80000余个机场及航空设施,以点状矢量形式表达其空间位置。Shapefile文件包含机场名称、机场类型、所属国家(地区)、所在城市及地理坐标等基础属性信息,可用于航空基础设施统计分析、空间分布研究及专题制图。同时配套提供MXD工程文件,已完成基础图层组织与符号配置,用户可在ArcGIS平台中直接进行编辑与成果输出。 在应用层面,该数据可广泛用于全球航空运输网络分析、机场可达性评价、交通基础设施布局研究、区域经济联系分析及应急保障规划等领域。结合人口、GDP、铁路、公路、港口或航线数据,还可开展综合交通网络分析、航空枢纽识别、物流运输优化及区域发展评价。此外,该数据同样适用于GIS教学、交通地理及航空运输相关课程实践。 资源同时提供标准成图TIF文件,可直接用于科研论文插图、项目报告及教学展示。整体数据结构规范、兼容性强,可在ArcGIS、QGIS等主流GIS软件平台中直接使用。
【重要提示】本资源设置为0积分下载,若非0积分请勿轻易下载 亲爱的CSDN用户: 首先感谢你点进这个资源页面。我需要提前说明一个重要情况: 本资源原本已设置为“0积分下载”,即作者希望完全免费共享。但CSDN平台有时会根据文件的下载热度、文件大小、用户权限等因素,自动将部分资源的积分调整为非0数值(如1积分、2积分、5积分等)。这是平台系统的自动行为,而非作者本人的设定。 因此,如果你当前看到该资源的下载所需积分不是0(例如显示为1、2、3……),请谨慎决定是否下载。 如果你按照非0积分支付并下载后发现资源内容不符合预期、链接失效,或者实际上该资源本应是免费的,作者无法为此承担积分损失或退还操作。强烈建议:仅在页面显示为0积分时进行下载。 另外,本资源描述中并未直接提供具体的下载地址或外部链接,因为它本身是一个通过CSDN官方上传通道提交的文件/内容包。如果你看到描述中没有外部网盘地址,这是正常的——资源文件应通过CSDN内置的“下载”按钮获取。若因平台积分显示异常导致你支付了积分,请优先联系CSDN客服咨询积分退还政策,作者没有权限修改平台自动设定的积分值。 感谢你的理解与支持。技术分享本应开放,但受限于平台规则,特此提醒如上。祝学习进步!
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值