我们刚刚将 Swiftlint 添加到我们的项目中,我们希望遵循所有规则,但我不确定“type_body_length”警告是什么意思。我不是以英语为母语的人,所以我觉得这有点令人困惑。
文件长度也有规则,那么它们有何不同?什么属于这个定义?
我在swift3中有以下代码,我使用swift lint来代码.代码如下:
func selectedMenuInLoggedOutState(sender: UIButton) {
switch sender.tag {
case 1:
if let menu = LeftGuestMenu(rawValue: 0) {
self.changeGuestViewController(menu)
}
case 2:
if let menu = LeftGuestMenu(rawValue: 1) {
self.changeGuestViewController(menu)
}
case 3:
if let menu = LeftGuestMenu(rawValue: 2) {
self.changeGuestViewController(menu)
}
case 4:
if let menu = LeftGuestMenu(rawValue: 3) {
self.changeGuestViewController(menu)
}
case 5:
if let menu = LeftGuestMenu(rawValue: 4) {
self.changeGuestViewController(menu)
}
case 6:
if let menu = LeftGuestMenu(rawValue: 5) {
self.changeGuestViewController(menu)
}
default:
break
}
}
Run Code Online (Sandbox Code Playgroud)
swiftlint会产生一个称为圈复杂度的警告.为什么会出现此警告警告以及如何解决此问题?
我尝试使用 CocoaPods 安装 SwiftLint,并在 Build 阶段添加以下脚本:
"${PODS_ROOT}/SwiftLint/swiftlint"
Run Code Online (Sandbox Code Playgroud)
SwiftLint 安装正确,我在项目中收到许多错误和警告。
然后,我创建了 swiftLint.yml 文件,在该文件中我修改了一些规则,但它们没有被考虑在内,并且 Xcode 项目中仍然存在相同数量的错误和警告。
当我运行此命令以确认规则的应用时:
./swiftlint lint --config .swiftlint.yml
Run Code Online (Sandbox Code Playgroud)
我收到错误:
No lintable files found at paths : ''
Run Code Online (Sandbox Code Playgroud)
请问我该如何解决这个问题?
使用自制软件安装swiftlint 时,一切都正确安装,但是当我打开 xcode 时,我看到未安装 swiftlint 的消息。我读过这个问题,它说自制软件现在安装在这条路径下/opt/homebrew,苹果硅和 xcode 会在 swiftlint 中查找/usr/local?我怎样才能让 xcode 重新确认我实际上已经安装了 swiftlint。Swiftlint 肯定已安装,我可以从终端输入 swiftlint 并查看所有命令。
我目前正在使用SwiftLint来完成我项目中的完美编码标准.安装后,我收到了很多警告,常见的是:
"冒号违规:在指定类型时,冒号应位于标识符的旁边,并且在字典文字中的键旁边.(冒号)".

var indexPath:IndexPath!
static let collapsedHeigth : CGFloat = 80
static let expandedHeigth : CGFloat = 210
Run Code Online (Sandbox Code Playgroud)
它意味着什么以及如何改进它?
我在这一行收到了一个SwiftLint警告:
return UIEdgeInsetsMake(topInset, leftInset, bottomInset, rightInset)
Run Code Online (Sandbox Code Playgroud)
这是警告:
遗留构造函数违规:Swift构造函数优于传统的便捷函数.(legacy_constructor)
我也在这条线路上收到警告:
return CGRectInset(bounds, insetX, insetY)
Run Code Online (Sandbox Code Playgroud)
遗留的CGGeometry函数违规:结构扩展属性和方法优于遗留函数(legacy_cggeometry_functions)
什么是斯威夫特版本UIEdgeInsetsMake和CGRectInset?
我正在尝试修复此错误:
Error: swiftlint does not have a version "0.11.1" in the Cellar.
Run Code Online (Sandbox Code Playgroud)
通过运行:
brew install swiftlint-0.11.1
Run Code Online (Sandbox Code Playgroud)
然而,这不起作用,然后我尝试了" brew search swiftlint",但没有出现.
有人能指出我使用特定版本安装swiftlint的正确方法吗?
我有一个swiftlint困扰我的警告.
warning: Nesting Violation: Types should be nested at most 1 level deep (nesting)
编辑:确实@vadian指出了Swift语言指南的规则:要在另一种类型中嵌套类型,请在其支持的类型的外括号内写入其定义.类型可以嵌套到所需的级别.
我知道它与泛型的使用冲突,并且Xcode可能变得难以忍受地缓慢.它实际上是(通过测量最慢的编译点)我开始查看这个嵌套规则的原因.
皮棉规则的原因是什么,在这方面的良好做法是什么?请指出技术原因,而不是纯粹基于意见的建议.
Microsoft实际上有一个关于嵌套类型的页面,以及它们何时适用.虽然它不是针对Swift的,但它确实有一些有趣的跨语言思想.
我使用以下代码提供 UILabel 文本之间的行距。
let daysAttrString = NSMutableAttributedString(string: allDays)
let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.lineSpacing = 7
paragraphStyle.minimumLineHeight = 7
daysAttrString.addAttribute(NSParagraphStyleAttributeName, value:paragraphStyle, range:NSMakeRange(0, daysAttrString.length))
cell.operationalDays.attributedText = daysAttrString
Run Code Online (Sandbox Code Playgroud)
但是我在使用 SwiftLint 时收到以下警告,如下所示:
为什么显示它以及如何解决这个问题?
我遇到了 swiftlint 自动更正的奇怪行为。我的项目使用通过 SPM 导入的库。但是当我运行 linter 时,它会更改如下设置
B4621A7323D0A90F00545ADE /* LibraryName in Frameworks */ = {isa = PBXBuildFile; productRef = B4621A7223D0A90F00545ADE /* LibraryName */; };
files = (
B4621A7323D0A90F00545ADE /* LibraryName in Frameworks */,
packageProductDependencies = (
B4621A7223D0A90F00545ADE /* LibraryName */,
packageReferences = (
B4621A7123D0A90F00545ADE /* XCRemoteSwiftPackageReference "library-name" */,
Run Code Online (Sandbox Code Playgroud)
像这样的事情
B4621A7323D0A90F00545ADE /* BuildFile in Frameworks */ = {isa = PBXBuildFile; productRef = B4621A7223D0A90F00545ADE /* SwiftPackageProductDependency */; };
files = (
B4621A7323D0A90F00545ADE /* BuildFile in Frameworks */,
packageProductDependencies = (
B4621A7223D0A90F00545ADE /* …Run Code Online (Sandbox Code Playgroud)