Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >为什么这个方便的init没有在Swift中引入歧义?

为什么这个方便的init没有在Swift中引入歧义?
EN

Stack Overflow用户
提问于 2020-07-01 02:25:29
回答 1查看 49关注 0票数 1
代码语言:javascript
运行
AI代码解释
复制
@objc public convenience init(size: CGSize, name: String? = nil, address: Address? = nil, order: [Item] = [], phone: String? = nil) {
    self.init(size: size, name: name, address: address, order: order)
    self.phone = phone
}

@objc public required init(size: CGSize, name: String? = nil, address: Address? = nil, order: [Item] = []) {}

方便的初始化器在上面的代码中调用所需的初始化器。在我的测试中,我尝试调用

代码语言:javascript
运行
AI代码解释
复制
let object = ClassA(size: .zero)

我希望看到编译器抱怨多义性,因为两个初始化器都可以以这样的方式调用。但是,它实际上会编译并调用required初始化器。但是为什么呢?为什么在这种情况下没有歧义?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-01 03:36:09

不带参数的函数被认为是比参数带有默认值的函数更好的匹配。比较:

代码语言:javascript
运行
AI代码解释
复制
func f(_ arg: String = "") { print("unary") }
func f() { print("nullary") }
f()

输出:

代码语言:javascript
运行
AI代码解释
复制
nullary

如果两个函数都有带有默认值的参数,这是不明确的:

代码语言:javascript
运行
AI代码解释
复制
func f(_ arg: String = "") { print("string") }
func f(_ arg: Int = 1) { print("int") }
f()

输出:

代码语言:javascript
运行
AI代码解释
复制
error: Untitled Page 2.xcplaygroundpage:4:1: error: ambiguous use of 'f'
f()
^

Untitled Page 2.xcplaygroundpage:2:6: note: found this candidate
func f(_ arg: String = "") { print("string") }
     ^

Untitled Page 2.xcplaygroundpage:3:6: note: found this candidate
func f(_ arg: Int = 1) { print("int") }
     ^
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62668719

复制
相关文章
Swift基础-init详解
在讲解Swift的init之前,默认都有Swift开发基础,了解关键字designated,Optional,override,convenience等。为了方便全文讲述,整文会以class为对象,忽略struct和enum等。
sweet说好的幸福
2020/12/23
1.2K0
Swift基础-init详解
SpringBoot引入的依赖为什么没有版本号
在入门springboot的时候我相信很多朋友都有过这样的疑问,为什么spring boot项目在pom文件引入的某些依赖不需要指定版本呢?但是却并不妨碍我们使用或下载jar包 <?xml versi
框架师
2021/03/04
2.8K0
Swift 5.1 中引入的部分有用的新特性
Swift 5.1现在已经正式发布,尽管只是次要版本,它包含了大量的更改和改进。从基本的新功能,例如模块稳定性(使SDK供应商可以交付预编译的Swift框架)到所有SwiftUI以及其他功能的新语法功能。
韦弦zhy
2020/02/18
1.4K0
Swift 5.1 中引入的部分有用的新特性
GCD 在 Swift 中的用法
Swift 中,对 GCD 语法进行了彻底改写。引入了 DispatchQueue 这个类。
零式的天空
2022/03/22
1.6K0
GCD 在 Swift 中的用法
DispatchQueue Swift 中,对 GCD 语法进行了彻底改写。引入了 DispatchQueue 这个类。 先来看看在一个异步队列中读取数据, 然后再返回主线程更新 UI, 这种操作在新的 Swift 语法中是这样的: DispatchQueue.global().async { DispatchQueue.main.async { // 更新UI操作 } } DispatchQueue.global().async 相当于使用全局队列进行异步操作。然
BY
2018/05/11
2K0
在Servlet的init方法中创建线程
 servlet代码如下: package com.weichat.servlet; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.se
庞小明
2018/03/07
2.9K0
Swift专题讲解十六——ARC在Swift中的应用
        ARC(自动引用计数)是Objective-C和Swift中用于解决内存管理问题的方案。在学习Objective-C编程时经常会学习到一个关于ARC的例子:在一个公用的图书馆中,每次进入一人就将卡插入,走的时候将自己的卡拔出拿走。图书馆系统会判定只要有卡插入,就将图书馆的灯打开,当所有卡都被取走后,将图书馆的灯关掉。这个例子对应于Objective-C中的对象声明周期管理十分贴切。每当一个对象增加一个引用时,其引用计数会加1,当一个引用被取消时,对象的引用计数减1,当引用计数减为0时,说明此对象将不再有任何引用,对象会被释放掉,让出内存。Swift也采用同样的方式进行内存管理。
珲少
2018/08/15
1.3K0
Swift专题讲解十六——ARC在Swift中的应用
这个sql为什么没有用到索引
用户users 表中对 create_time 字段建有索引 现在查询某个时间段的用户,通过explain发现下面这个sql 没有用到索引 explain select * from user
dys
2018/04/02
1.3K0
这个sql为什么没有用到索引
FOC控制中的这个Bug是怎么引入的?
FOC作为BLDC和PMSM电机的高精度控制算法,受到越来越多工程师的喜爱和研究,而自ST公开电机控制SDK后,最近研究了下这个SDK,发现在不采集母线电压的时候,会出现BUG,电机无法启动。首先来看配置文件,如果是勾选母线电压
用户1605515
2020/03/31
8950
FOC控制中的这个Bug是怎么引入的?
在uniapp中引入地图
文档:https://uniapp.dcloud.io/component/map
阿超
2022/08/17
9300
在uniapp中引入地图
ModuleMap C 在swift中的使用
swift 有UNSafePoint的概念,但是不能够与C/C++直接交互,但是对于C/C++模块操作就需要进行一些改进那就是今天的主角moulemap啦。 要想使用你自己的C/C++按照 import的方式在swift使用那么你需要经历以下几个简单配置 1 当然是将对应的C/C++源码文件导入到swift项目中 2 配置modulemap啦 3 import 使用啦
大话swift
2019/07/04
3K0
ModuleMap C 在swift中的使用
C# 9.0中引入的新特性init和record的使用思考
.NET 5.0已经发布,C# 9.0也为我们带来了许多新特性,其中最让我印象深刻的就是init和record type,很多文章已经把这两个新特性讨论的差不多了,本文不再详细讨论,而是通过使用角度来思考这两个特性。
AI.NET 极客圈
2020/12/29
1.4K0
C# 9.0中引入的新特性init和record的使用思考
在openstck中配置使用cloud-init
cloud-init是在创建虚拟机时能够对虚拟机进行一些初始化操作的工程。在虚拟机启动的时候,对虚拟机进行一些列的操作,例如常用的:自动设置 虚拟机hostanme,设置虚拟机用户初始密码,自动安装软件等。OpenStack也支持配置cloud-init,本文介绍如何在openstack中使用cloud-init以及部分源码分析。
虚拟化云计算
2018/04/08
2.5K0
在openstck中配置使用cloud-init
iOS开发——GCD在Swift中的变脸
Xcode8正式发布后,Swift3也随即发布,为了跟上苹果这艘大船的脚步,赶紧逼着自己看文档哦。在看文档的过程中,发现GCD的变化跟OC相比简直都要不认识了,赶紧写个文章总结下,顺手复习下GCD中死锁的概念,死锁的总结发布在另一篇文章里了。
Originalee
2018/08/30
2.3K0
没有用到React,为什么我需要import引入React?
本质上来说JSX是React.createElement(component, props, ...children)方法的语法糖。
Tz一号
2020/09/10
1.9K0
iOS开发中使用系统中没有的字体-swift
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010105969/article/details/80068714
用户1451823
2018/09/13
1.2K0
iOS开发中使用系统中没有的字体-swift
UIViewController初始化没有 init 导致的 Bug
话说 *** Assertion failure in UITraitCollection * _Nonnull _UIGetCurrentFallbackTraitCollection(void)(), /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKitCore_Sim/UIKit-3899.13.13/_UIFallbackEnvironment.m:91
韦弦zhy
2019/11/11
2.7K0
在本地KVM中安装使用Cloud-init
Cloud-init是一个Linux虚拟机的初始化工具,被广泛应用在AWS和OpenStack等云平台中,用于在新建的虚拟机中进行时间设置、密码设置、扩展分区、安装软件包等初始化设置。本文主要研究在本地KVM虚拟机,也就是没有云平台的情况下,如何使用cloud-init进行初始化工作。示例虚拟机的操作系统是CentOS 7.1。
星哥玩云
2022/07/13
1.7K0
使用EasyExcel导出,这个轮子真方便
EasyExcel是一款优秀的Excel导出组件,基于注解的形式导出。除了导出,还支持导入。今天我们主要聊聊它的导出。
Lvshen
2022/05/05
7.9K0
使用EasyExcel导出,这个轮子真方便
【DB笔试面试565】在Oracle中,为什么索引没有被使用?
“为什么索引没有被使用”是一个涉及面较广的问题。有多种原因会导致索引不能被使用。首要的原因就是统计信息不准,第二原因就是索引的选择度不高,使用索引比使用全表扫描效率更差。还有一个比较常见的原因,就是对索引列进行了函数、算术运算或其他表达式等操作,或出现隐式类型转换,导致无法使用索引。还有很多其它原因会导致不能使用索引,这个问题在MOS(MOS即My Oracle Support)“文档1549181.1为何在查询中索引未被使用”中有非常详细的解释,作者已经将相关内容发布到BLOG(http://blog.itpub.net/26736162/viewspace-2113670/)上了。下面是一些非常有用的检查项目。
AiDBA宝典
2019/09/29
1.2K0
【DB笔试面试565】在Oracle中,为什么索引没有被使用?

相似问题

Swift 2.2中init的歧义用法

20

CFStringTransform和Swift 3中“init”的歧义用法

13

为什么这个ActiveRecord查询没有歧义?

11

为什么在这个函数调用中没有歧义?

45

为什么这个GADT上的模式匹配似乎在类型检查器中引入了歧义?

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文