V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
jamfer
V2EX  ›  问与答

请问 swift3 中怎么把一个 String 当做函数名来使用

  •  
  •   jamfer · 2017-04-13 11:54:18 +08:00 · 1724 次点击
    这是一个创建于 2785 天前的主题,其中的信息可能已经有所发展或是发生改变。

    例如

    var urls = ["login","register"]
    

    我需要在一个 tableview 中将 urls[indexPath.row] 作为函数名来使用:

    let myfuncname = urls[indexPath.row]
    let myfunc = myfuncname()
    

    这样肯定是错误的,请问正确的写法是什么?

    10 条回复    2017-04-14 09:00:44 +08:00
    jamfer
        1
    jamfer  
    OP
       2017-04-13 11:55:26 +08:00
    为何刚发布的主题就沉底了
    crashX
        2
    crashX  
       2017-04-13 12:13:51 +08:00   ❤️ 1
    let myfunc = Selector(myfuncname),会有警告。
    isweal
        3
    isweal  
       2017-04-13 13:21:41 +08:00   ❤️ 1
    ``` swift
    //view.addSubview(imageView)
    let name = "addSubview:"
    let selector = NSSelectorFromString(name)
    view.perform(selector, with: imageView)
    ```
    看得懂吧。
    jamfer
        4
    jamfer  
    OP
       2017-04-13 13:36:55 +08:00
    @isweal 感谢回复,抱歉我不是很懂
    kingcos
        5
    kingcos  
       2017-04-13 14:21:08 +08:00   ❤️ 1
    override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let urls = ["register", "login"]
    // let selector = Selector(indexPath.row)
    let selector = NSSelectorFromString(indexPath.row)
    perform(selector)
    }

    func register() {
    print(#function)
    }

    func login() {
    print(#function)
    }

    两种都可以吧
    kingcos
        6
    kingcos  
       2017-04-13 14:22:39 +08:00
    @kingcos 其实感觉这样并不安全,可能用 extension 或者 enum 之类的更安全吧
    jamfer
        7
    jamfer  
    OP
       2017-04-13 14:26:13 +08:00
    @kingcos 我用 self.present(selector, animated:true, completion:nil) 还是会报错。这里应该怎么用呢?
    ldp940622
        8
    ldp940622  
       2017-04-13 16:01:44 +08:00
    这样做危险性太大了,个人觉得用 enum 和路由方式来封装比较合理
    kingcos
        9
    kingcos  
       2017-04-13 21:36:48 +08:00 via iPhone
    @jamfer 抱歉,下午上课没有时间看帖。
    present 那个放不是跳转控制器的吗… perform 才是调用 Selector 的
    jamfer
        10
    jamfer  
    OP
       2017-04-14 09:00:44 +08:00
    @kingcos 恩怪我没说清楚,其实我是需要放到 present 里用的 Orz
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3137 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 13:56 · PVG 21:56 · LAX 05:56 · JFK 08:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.