swift4.0 怎么用字符串创建方法并执行? 40C

swift4.0下,使用字符串创建方法,发现无参数的可以实现,有参数的却怎么都调不了。用字符串创建方法哦,不是直接写方法名。
#selector(test:(string:))
用上面这种是必须要实现了该方法才能用,且不是从字符串直接转成方法的。我试过
Selector(test:)
Selector(test(string:))
Selector(test(:))
都不行,用perform调用都执行不了!
请问有什么方法,可以通过字符串直接转成方法调用,带参数的!

3个回答

首先 Selector 是 OC 里边儿的东西,涉及到运行时动态调用,这一点儿严格安全的Swift是不支持的。

Swift里边的Selector更多是为了和OC交互,而OC中Selector的使用场景在Swift中都有其他的解决方案

我看了题主的问题两遍,所理解的题主要解决的问题是:要在Swift中实现 动态调用一个带参数的方法,而这个方法可能还没实现,如果是,下面给出解决方案,如果不是,请题主补充问题

** 解决的方法很简单: 利用 协议 和 协议的默认实现,无论这个类是否实现了这个方法,只要它实现了相关协议(有默认实现),你只管调用便是。**


  • 自定义一个协议,声明你要动态调用的方法,并提供默认实现
protocol someProtocol {
    func exampleFunction(parm: String)
}
extension someProtocol {
    //协议的默认实现
    func exampleFunction(parm: String) {
        print("我是默认的协议实现,当你看到我,说明你所调用的类并没有覆盖我的实现")
    }
}


  • 让你要调用的方法的所在类符合这个协议(这个类可以不实现这个方法,但是如果调用将会走默认实现)
class ViewController: UIViewController, someProtocol {

    override func viewDidLoad() {
        super.viewDidLoad()
        //尽情调用,不用搞什么字符串Selector
        self.exampleFunction(parm: "winter is Coming!")
    }
    //实现协议,覆盖默认实现(你不实现,上边照样可以调用)
    func exampleFunction(parm: String) {
        print(parm)
    }
}

  • 看看在别的类调用上边儿那个类的方法如何
class ViewController2: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
// 1. 动态获取某个类名
//        let otherClass = NSClassFromString("S.ViewController") as! UIViewController.Type// S. 加命名空间前缀
//        let instance: someProtocol = otherClass.init() as! someProtocol//声明它实现了协议(告诉编译器:它有那个方法)
// 2. 直接调用
        let instance = ViewController()
        instance.exampleFunction(parm: "winter has comed!")
    }
}


以上, 希望可以帮助到你!
ps: 这个Markdowm 编辑器是真难用!

qq_31737037
Sanker_xr 对了 那个协议命名不规范,该大写的
接近 2 年之前 回复

Selector(test:)
Selector(test(string:))
Selector(test(:))

可以直接赋值,系统会识别

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
IOS SWIFT 判断字符串是否含有字母

iOS 如和判断字符串中是否含有字母,用swift写。网上给的没弄出来,希望小伙伴们能给个好的例子

swift中字符串转换成Int

看书上说有个toInt()的函数,为啥最新的xcode报错,程序如下: var x:Int=1 var y:String="1" var z:Int=y.toInt()//此处报错

swift字符串转换为字符串

<div class="post-text" itemprop="text"> <p>I have an app that has to send a string from one <code>viewcontroller</code> to another. I am using <code>prepareforsegue</code> which works fine i can print the var out on the other viewcontroller in a <code>UILabel</code>. </p> <p>But now I am trying to send it to my php script which communicates with my database. The problem is I am receiving the var that is being send over as var helpCode:string?</p> <p>Then the function runs which is NSString and I can't get it to work. I have tested it by just typing the phrase in the function as NSString and i get the correct response from the server. But when I set it up as it has to be with variables i get a fatal error because it is sending nil. When I try to send it as NSString i get string can't be converted to NSString. How can I do this? </p> <p>I see lots of solutions for nsstring to string but not the other way around. Or am i doing something else wrong. </p> </div>

有什么方法可以替换 Swift String 中的字符吗?

<div class="post-text" itemprop="text"> <p>I'm looking for a way to replace characters in a Swift <code>String</code>.</p> <p>Example: <code>"This is my string"</code></p> <p>I'd like to replace <code></code> with <code>+</code> to get: <code>"This+is+my+string"</code>.</p> <p>How can I achieve this?</p> </div> <p>转载于:https://stackoverflow.com/questions/24200888/any-way-to-replace-characters-on-swift-string</p>

swift 转码关于gbk编码问题

Swift 我想把uint8数组转成字符串,是gbk编码的。请教下我应该怎么转

swift中的字符和字符串问题

看的1.0的教程,有一段代码是 var w1 = "hello" var w2 = " " var n = countElements(w1) println(n) for w in w1 { w2 +=w println(w2) } 实现的效果是 h he hel hell hello 而目前已经是2.0了。我根据目前自己掌握的修改了一下,还是有错误,还请帮我指正一下 var w1 = "hello" var w2 = " " var n = w1.characters.count print(n) for w in w1.characters{ w2 += w print(w2) } 上面就是我修改的,在w2+=w那行显示错误了,实在不知道改怎么修改了,个人能力有限,求大神帮忙修改一下,万分感谢

IOS 如何把16进制字符串转换成byte 求各位大神 最好能有代码

IOS 如何把16进制字符串转换成byte?求各位大神 最好能有代码

把一个字符串分割成一个数组

<div class="post-text" itemprop="text"> <p>Say I have a string here:</p> <pre><code>var fullName: String = "First Last" </code></pre> <p>I want to split the string base on white space and assign the values to their respective variables</p> <pre><code>var fullNameArr = // something like: fullName.explode(" ") var firstName: String = fullNameArr[0] var lastName: String? = fullnameArr[1] </code></pre> <p>Also, sometimes users might not have a last name.</p> </div> <p>转载于:https://stackoverflow.com/questions/25678373/swift-split-a-string-into-an-array</p>

swift double转string 不失去精度

请问怎么将double转成string才能不损失数据本身的小数位数呢,例如,将1.000转换为“1.000” 直接转换会变成1,而使用format则需要指定保留小数点位数,否则自动保留6位 可不可以什么都不要做,我就想转个字符串而已……

swift 如何使用数组创建按钮

数组里面是通过json解析的数据模型类,类里面有个字符串类型的属性,如何挨个取出里面的字符串设置成按钮的文字?我使用for in但是无法进入循环

如何将多个字符串和int合并为单个字符串

<div class="post-text" itemprop="text"> <p>我是Go的新手。 找不到任何官方文档显示如何将多个字符串合并为一个新字符串。 </p> <p>我所期望的是: </p> <p><strong>输入值</strong>: <code>"key:"</code>, <code>"value"</code>, <code>", key2:"</code>, <code>100</code></p> <p><strong>输出值</strong>: <code>"Key:value, key2:100"</code></p> <p>如果可能的话,我想使用+来合并字符串,就像在Java和Swift中一样。</p> </div>

swift for循环如何间隔特定时间执行一次?

我是刚刚学习swift语言,求各位大大帮忙!不尽感谢!最简单的例子想要在for循环中每隔1秒输出,该如何改写如下代码? for i in "helloSwift"{ Print (String(i)) }

C++ 如何做到字符串插值?

C++有类似于Swift的字符串插值的方式吗? > println("The current value of friendlyWelcome is $(friendlyWelcome)"); 要编译时就处理。 预处理成类似于以下的代码: > cout<<"The current value of friendlyWelcome is "<< friendlyWelcome << ""<< endl;

php使用正则表达式判断 字符串只能包含 中英文,数字,还有‘-’,‘_’,求这个正则表达式。

php使用正则表达式判断 字符串只能包含 中英文,数字,还有‘-’,‘_’,求这个正则表达式。

将 NSURL 转换为 NSString

<div class="post-text" itemprop="text"> <p>I have an app where the user can choose an image either from the built-in app images or from the iphone photo library. I use an object Occasion that has an <code>NSString</code> property to save the <code>imagePath</code>. </p> <p>Now in the case of the built-in app images I do get the file name as an <code>NSString</code> an save in the <code>[occasion imagePath]</code>. But in the 2nd case where the user picks an image form the photo library I get an <code>NSURL</code> which I want to convert to an <code>NSString</code> to be able to save it in <code>[occasion imagePath</code>].</p> <p>Is it possible to convert the <code>NSURL</code> to an <code>NSString</code>?</p> </div> <p>转载于:https://stackoverflow.com/questions/8082719/convert-an-nsurl-to-an-nsstring</p>

swift 创建container时出现错误不知道怎么解决

我输入了这样一条命令: swift -A http://192.168.1.101:7480/auth/1.0 -U mytry:swift -K 'AtVBbaot5mYXChq9UDTmM4fNzQ3SPu3yAzAB1UMs' post a_ewn_tyr 我想通过这一条命令创建一个名为a_ewn_tyr的container,但是报了如下的错误: Container PUT failed: http://192.168.1.101:7480/swift/v1/a_ewn_tyr 400 Bad Request InvalidLocationConstraint Failed Transaction ID: tx000000000000000000004-005b1f2e59-1bdc5-default IP和端口我都检查过,是可以正常使用的,但是提示我非法的地址约束就不知道为什么了,然后我完全不知道怎么解决,如能帮助解决将十分感谢

求教各位大侠,如何在不用字符截取的方法截取data数组下面的json字符(范围:从data的'['开始到']')

``` { "code": 200, "message": null, "data": [ { "ecode": "TmuGsj", "terminalAppId": "e128201a907e48acbf54acebcdf9492a", "code": "yx_test2", "name": "越秀首页2", "terminalCode": "Web", "description": null, "isEnabled": true, "appId": "0698bed2-97a4-4cdd-bd88-c46a7bac51e3", "versionId": null, "images": [], "eCode": "TmuGsj", "sourceId": null }, { "ecode": "TmuGsj", "terminalAppId": "28f684070eab45c1bc5dbde54ed9f7fd", "code": "yx_test2", "name": "越秀首页2", "terminalCode": "1", "description": null, "isEnabled": true, "appId": "0698bed2-97a4-4cdd-bd88-c46a7bac51e3", "versionId": null, "images": [], "eCode": "TmuGsj", "sourceId": null } ], "total": 0, "count": 2 }![图片说明](https://img-ask.csdn.net/upload/201901/01/1546331295_874720.jpg) ```

如果能重来,我不会选择北漂——初见北京

一个人走的路

技术大佬:我去,你写的 switch 语句也太老土了吧

昨天早上通过远程的方式 review 了两名新来同事的代码,大部分代码都写得很漂亮,严谨的同时注释也很到位,这令我非常满意。但当我看到他们当中有一个人写的 switch 语句时,还是忍不住破口大骂:“我擦,小王,你丫写的 switch 语句也太老土了吧!” 来看看小王写的代码吧,看完不要骂我装逼啊。 private static String createPlayer(PlayerTypes p...

副业收入是我做程序媛的3倍,工作外的B面人生是怎样的?

提到“程序员”,多数人脑海里首先想到的大约是:为人木讷、薪水超高、工作枯燥…… 然而,当离开工作岗位,撕去层层标签,脱下“程序员”这身外套,有的人生动又有趣,马上展现出了完全不同的A/B面人生! 不论是简单的爱好,还是正经的副业,他们都干得同样出色。偶尔,还能和程序员的特质结合,产生奇妙的“化学反应”。 @Charlotte:平日素颜示人,周末美妆博主 大家都以为程序媛也个个不修边幅,但我们也许...

我说我不会算法,阿里把我挂了。

不说了,字节跳动也反手把我挂了。

2020年大厂Java面试前复习的正确姿势(800+面试题答案解析)

前言 个人觉得面试也像是一场全新的征程,失败和胜利都是平常之事。所以,劝各位不要因为面试失败而灰心、 丧失斗志。也不要因为面试通过而沾沾自喜,等待你的将是更美好的未来,继续加油! 本篇分享的面试题内容包括:Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Redis、MySQL、Spring、SpringBoot、SpringCloud、RabbitMQ...

抖音上很火的时钟效果

反正,我的抖音没人看,别人都有几十万个赞什么的。 发到CSDN上来,大家交流下~ 主要用到原生态的 JS+CSS3。 具体不解释了,看注释: &lt;!DOCTYPE html&gt; &lt;html lang="en"&gt; &lt;head&gt; &lt;meta charset="UTF-8"&gt; &lt;title&gt;Title&lt;/tit...

记录下入职中软一个月(外包华为)

我在年前从上一家公司离职,没想到过年期间疫情爆发,我也被困在家里,在家呆着的日子让人很焦躁,于是我疯狂的投简历,看面试题,希望可以进大公司去看看。 我也有幸面试了我觉得还挺大的公司的(虽然不是bat之类的大厂,但是作为一名二本计算机专业刚毕业的大学生bat那些大厂我连投简历的勇气都没有),最后选择了中软,我知道这是一家外包公司,待遇各方面甚至不如我的上一家公司,但是对我而言这可是外包华为,能...

又出事了?网站被攻击了?高中生?

北京时间2020年3月27日9点整,如往常一样来到公司,带开电脑,正准备打开Github网站看一会源代码,再开始手头的工作。哟吼,一直打不开,一直出现如下页面: 我想很多网友也尝到了甜头,各大技术群炸开了锅,据网友反馈有攻击者正在发起大规模的中间人挟持,京东和Github等网站等网站都受到了影响。 什么是中间中间人挟持呢? 简而言之,就是攻击者在数据网络传输的过程中,截获传输过程中的数据并篡改...

培训班出来的人后来都怎么样了?(二)

接着上回说,培训班学习生涯结束了。后面每天就是无休止的背面试题,不是没有头脑的背,培训公司还是有方法的,现在回想当时背的面试题好像都用上了,也被问到了。回头找找面试题,当时都是打印下来天天看,天天背。 不理解呢也要背,面试造飞机,上班拧螺丝。班里的同学开始四处投简历面试了,很快就有面试成功的,刚开始一个,然后越来越多。不知道是什么原因,尝到胜利果实的童鞋,不满足于自己通过的公司,嫌薪水要少了,选择...

面试了一个 31 岁程序员,让我有所触动,30岁以上的程序员该何去何从?

最近面试了一个31岁8年经验的程序猿,让我有点感慨,大龄程序猿该何去何从。

大三实习生,字节跳动面经分享,已拿Offer

说实话,自己的算法,我一个不会,太难了吧

程序员垃圾简历长什么样?

已经连续五年参加大厂校招、社招的技术面试工作,简历看的不下于万份 这篇文章会用实例告诉你,什么是差的程序员简历! 疫情快要结束了,各个公司也都开始春招了,作为即将红遍大江南北的新晋UP主,那当然要为小伙伴们做点事(手动狗头)。 就在公众号里公开征简历,义务帮大家看,并一一点评。《启舰:春招在即,义务帮大家看看简历吧》 一石激起千层浪,三天收到两百多封简历。 花光了两个星期的所有空闲时...

工作八年,月薪60K,裸辞两个月,投简历投到怀疑人生!

近日,有网友在某职场社交平台吐槽,自己裸辞两个月了,但是找工作却让自己的心态都要崩溃了,全部无果,不是已查看无回音,就是已查看不符合。 “工作八年,两年一跳,裸辞两个月了,之前月薪60K,最近找工作找的心态崩了!所有招聘工具都用了,全部无果,不是已查看无回音,就是已查看不符合。进头条,滴滴之类的大厂很难吗???!!!投简历投的开始怀疑人生了!希望 可以收到大厂offer” 先来看看网...

我把华为小米年报放一起,发现华为才是真·手机公司,小米确实不靠卖手机赚钱...

郭一璞 发自 凹非寺量子位 报道 | 公众号 QbitAI国产手机界的两大玩家,华为&amp;小米,昨天在同一天前后脚发布了2019年财报。同行冤家,发财报也碰在了同一天。那我们就对比...

大牛都会用的IDEA调试技巧!!!

导读 前天面试了一个985高校的实习生,问了他平时用什么开发工具,他想也没想的说IDEA,于是我抛砖引玉的问了一下IDEA的调试用过吧,你说说怎么设置断点...

97年世界黑客编程大赛冠军作品(大小仅为16KB),惊艳世界的编程巨作

这是世界编程大赛第一名作品(97年Mekka ’97 4K Intro比赛)汇编语言所写。 整个文件只有4095个字节, 大小仅仅为16KB! 不仅实现了3D动画的效果!还有一段震撼人心的背景音乐!!! 内容无法以言语形容,实在太强大! 下面是代码,具体操作看最后! @echo off more +1 %~s0|debug e100 33 f6 bf 0 20 b5 10 f3 a5...

不要再到处使用 === 了

我们知道现在的开发人员都使用 === 来代替 ==,为什么呢?我在网上看到的大多数教程都认为,要预测 JavaScript 强制转换是如何工作这太复杂了,因此建议总是使用===。这些都...

什么是a站、b站、c站、d站、e站、f站、g站、h站、i站、j站、k站、l站、m站、n站?00后的世界我不懂!

A站 AcFun弹幕视频网,简称“A站”,成立于2007年6月,取意于Anime Comic Fun,是中国大陆第一家弹幕视频网站。A站以视频为载体,逐步发展出基于原生内容二次创作的完整生态,拥有高质量互动弹幕,是中国弹幕文化的发源地;拥有大量超粘性的用户群体,产生输出了金坷垃、鬼畜全明星、我的滑板鞋、小苹果等大量网络流行文化,也是中国二次元文化的发源地。 B站 全称“哔哩哔哩(bilibili...

十个摸鱼,哦,不对,是炫酷(可以玩一整天)的网站!!!

文章目录前言正文**1、Kaspersky Cyberthreat real-time map****2、Finding Home****3、Silk – Interactive Generative Art****4、Liquid Particles 3D****5、WINDOWS93****6、Staggering Beauty****7、Ostagram图片生成器网址****8、全历史网址*...

终于,月薪过5万了!

来看几个问题想不想月薪超过5万?想不想进入公司架构组?想不想成为项目组的负责人?想不想成为spring的高手,超越99%的对手?那么本文内容是你必须要掌握的。本文主要详解bean的生命...

毕业5年,我熬夜整理出了这50个优质的电子书网站,吐血推荐!

大家好,我是武哥,最近经常有小伙伴问我要电子书,都什么年代了,还找不到电子书吗?如果要说原因,那就是你还没遇到武哥我(手动滑稽~)!我今天把这么多年我经常看的电子书网站整理一下给大家,基本上能解决大家的需求。不管是在校生还是已经工作了,相信肯定对你有所帮助! 1.鸠摩搜书 首先给大家推荐的网站是:鸠摩搜书 地址:https://www.jiumodiary.com/ 这个网上非常棒,上面有很多优质...

MySQL性能优化(五):为什么查询速度这么慢

前期回顾: MySQL性能优化(一):MySQL架构与核心问题 MySQL性能优化(二):选择优化的数据类型 MySQL性能优化(三):深入理解索引的这点事 MySQL性能优化(四):如何高效正确的使用索引 前面章节我们介绍了如何选择优化的数据类型、如何高效的使用索引,这些对于高性能的MySQL来说是必不可少的。但这些还完全不够,还需要合理的设计查询。如果查询写的很糟糕,即使表结构再合理、索引再...

大厂的 404 页面都长啥样?最后一个笑了...

每天浏览各大网站,难免会碰到404页面啊。你注意过404页面么?猿妹搜罗来了下面这些知名网站的404页面,以供大家欣赏,看看哪个网站更有创意: 正在上传…重新上传取消 腾讯 正在上传…重新上传取消 网易 淘宝 百度 新浪微博 正在上传…重新上传取消 新浪 京东 优酷 腾讯视频 搜...

自从喜欢上了B站这12个UP主,我越来越觉得自己是个废柴了!

不怕告诉你,我自从喜欢上了这12个UP主,哔哩哔哩成为了我手机上最耗电的软件,几乎每天都会看,可是吧,看的越多,我就越觉得自己是个废柴,唉,老天不公啊,不信你看看…… 间接性踌躇满志,持续性混吃等死,都是因为你们……但是,自己的学习力在慢慢变强,这是不容忽视的,推荐给你们! 都说B站是个宝,可是有人不会挖啊,没事,今天咱挖好的送你一箩筐,首先啊,我在B站上最喜欢看这个家伙的视频了,为啥 ,咱撇...

代码注释如此沙雕,会玩还是你们程序员!

某站后端代码被“开源”,同时刷遍全网的,还有代码里的那些神注释。 我们这才知道,原来程序员个个都是段子手;这么多年来,我们也走过了他们的无数套路… 首先,产品经理,是永远永远吐槽不完的!网友的评论也非常扎心,说看这些代码就像在阅读程序员的日记,每一页都写满了对产品经理的恨。 然后,也要发出直击灵魂的质问:你是尊贵的付费大会员吗? 这不禁让人想起之前某音乐app的穷逼Vip,果然,穷逼在哪里都是...

总结了Mybatis,原来知识点也没多少嘛

看完这篇Mybatis,感觉你三天就会用了。

爬虫(101)爬点重口味的

小弟最近在学校无聊的很哪,浏览网页突然看到一张图片,都快流鼻血。。。然后小弟冥思苦想,得干一点有趣的事情python 爬虫库安装https://s.taobao.com/api?_ks...

疫情后北上广深租房价格跌了吗? | Alfred数据室

去年3月份我们发布了《北上广深租房图鉴》(点击阅读),细数了北上广深租房的各种因素对租房价格的影响。一年过去了,在面临新冠疫情的后续影响、城市尚未完全恢复正常运转、学校还没开学等情况下...

面试官给我挖坑:a[i][j] 和 a[j][i] 有什么区别?

点击上方“朱小厮的博客”,选择“设为星标”后台回复&#34;1024&#34;领取公众号专属资料本文以一个简单的程序开头——数组赋值:int LEN = 10000; int[][] ...

在拼多多上班,是一种什么样的体验?我心态崩了呀!

之前有很多读者咨询我:武哥,在拼多多上班是一种什么样的体验?由于一直很忙,没抽出时间来和大家分享。上周末特地花点时间来写了一篇文章,跟大家分享一下拼多多的日常。 1. 倒时差的作息 可能很多小伙伴都听说了,拼多多加班很严重。这怎么说呢?作息上确实和其他公司有点区别,大家知道 996,那么自然也就能理解拼多多的“11 11 6”了。 所以当很多小伙伴早上出门时,他们是这样的: 我们是这样的: 当...

又一起程序员被抓事件

就在昨天互联网又发生一起让人心酸的程序员犯罪事件,著名的百度不限速下载软件 Pandownload PC 版作者被警方抓获。案件大致是这样的:软件的作者不仅非法盗取用户数据,还在QQ群进...

瑞德西韦重症用药结果再曝光,上百名重症一周内好转,股价大涨19%

郭一璞 发自 凹非寺量子位 报道 | 公众号 QbitAI期盼已久的瑞德西韦临床数据,现在“偷跑”了。在芝加哥大学医学院的临床试验中,125名病人参与,大部分人都已经出院,其中只有2名病...

相关热词 c# 按行txt c#怎么扫条形码 c#打包html c# 实现刷新数据 c# 两个自定义控件重叠 c#浮点类型计算 c#.net 中文乱码 c# 时间排序 c# 必备书籍 c#异步网络通信
立即提问