小编Kal*_*Kal的帖子

协议扩展初始化器强制调用 self.init

我只是在阅读有关协议初始值设定项要求的 Apple Swift 4 文档并在协议扩展中提供默认实现。

import UIKit
protocol Protocol {
    init()
}
extension Protocol {
    init() {
        print("SDf")
        self.init() // Line 1
                    // Compiler error occured if this is omitted 
                    //"'self.init' isn't called on all paths before returning from initializer"
    }
}

struct Structure: Protocol {
    init(string: String) {

    }
}

Structure()      // Line 2
Run Code Online (Sandbox Code Playgroud)

现在如您所见,执行将进入循环,因为默认情况下该结构没有实现 for init(),因此将调用提供的协议 init 并再次调用自身,因此进入无限循环.

现在,知道了这一点,如果我删除第 1 行,编译器就会给出错误。

Q. 为什么强制我self.init()在1号线使用,如何摆脱这种情况?

swift swift-protocols

5
推荐指数
1
解决办法
2073
查看次数

HTML5 是否允许在标题(如 h1)内使用块级元素(如 div)?

我总是会说不,但后来我从Semantic UI(和Fomantic UI)中发现了这段代码,这是一个非常流行的前端框架:

<h2 class="ui icon header">
  <i class="settings icon"></i>
  <div class="content">
    Account Settings
    <div class="sub header">Manage your account settings and set e-mail preferences.</div>
  </div>
</h2>
Run Code Online (Sandbox Code Playgroud)

该代码让我觉得不寻常,原因有两个:(1)<i>标签已被重新用作图标的通用挂钩,(2) 该代码嵌套<div><h2>元素内部。我质疑第一个的语义和第二个的有效性。

现在我想这些代码可以在所有主要浏览器中运行,否则他们就不会使用它,但它看起来不太惯用。更重要的是,它有效吗?


注意:我在问题中使用了术语“块级元素”(每个人都理解),但正如MDN 文档指出的那样:

块级元素与内联元素的区别在 4.01 之前的 HTML 规范中使用。在 HTML5 中,这种二元区别被一组更复杂的内容类别所取代。虽然“内联”类别大致对应于短语内容的类别 ,但“块级”类别并不直接对应于任何 HTML5 内容类别,但“块级”和“内联”元素组合在一起对应于流程HTML5 中的内容

html semantic-ui fomantic-ui

5
推荐指数
1
解决办法
1748
查看次数

如何使用ruby用"\"拆分字符串?

让我们说我有一个字符串:

str = "12345\56789"
Run Code Online (Sandbox Code Playgroud)

如何将字符串分成2个单词?

["12345","56789"]
Run Code Online (Sandbox Code Playgroud)

ruby string split escaping character

-1
推荐指数
1
解决办法
1686
查看次数