前两天写了下项目的 REEADME,主要涉及到版本控制、工程目录说明、编程规范三部分。工程目录部分这里就略了,版本控制也是git比较基本的模式。重点是第三部分的编程规范,这部分转自:Swift 4.0 编码规范,持续更新中…(已更新Swift 5.0),整体来说还是比较全面的,大家可以多为原文作者点赞!
目录:
项目采用git-flow
模式进行开发, 两个长线分支:master
, develop
, 其他的都是临时的、短暂的辅助分支. 分支说明如下:
每次提交前务必进行 code review,可借助 sourceTree 之类的工具查看 diff,单个成员时自我审查,多个成员时发起 merge request 由负责人审查。
禁止commit的代码包含 print
,需要打印信息的地方可用项目中已封装的 debugPrint
代替。
项目中需要忽略的文件已做处理,后续如有需要忽略的内容,要及时更新到 .gitignore
文件。
如非必要, 不推荐使用 git add .
&git commit
命令, 所有需要纳入版本控制的文件, 请务必审查。
所有 commit 必须写明开发内容, 以前缀区分,具体规则如下
Subject: 1.新增xxx页面 2.新增xxx功能
Fix: 1. 修复 xxx 问题
Update: 更新 xxx
Merge: 合并 xxx 分支,解决 xxx 冲突
再次说明,这部分为转载内容。点击查看原文
let value = 1 + 2
let titleArray = [1, 2, 3, 4, 5]
// function Define
func myFunction {
// 处理
}
if typeValue == 1 {
// 处理
}
func setPerson(name: String, pAge: Int) {
self.name = name
age = pAge
}
enum Direction {
case north
case south
case east
case west
}
let currentDirection = .west
/// <#Description#>
///
/// - Parameters:
/// - tableView: <#tableView description#>
/// - section: <#section description#>
/// - Returns: <#return value description#>
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return dataList.count
}
// MARK: - UITableViewDelegate
// MARK: - Action
// MARK: - Request
// MARK: - UICollectionViewDelegate, UICollectionViewDataSource
extension XMHomeViewController: UICollectionViewDelegate, UICollectionViewDataSource {
// 代理方法
}
// MARK: - HttpsRequest
extension XMHomeViewController {
// 网络请求方法
}
@available(iOS 8.0, *)
func myFunction() {
//
}
class MyClass: class {
let myImageView: UIImageView
let myName: String
}
let htmlString = "https://www.baidu.com"
let urlString: URLString
let userID: UserID
class HTMLModel {
//
}
var isMine: Bool = false
// MARK: - 懒加载
private lazy var tableView: UITableView = {
let tableView = UITableView.init(frame: CGRect.zero, style: .plain)
tableView.separatorStyle = .none
tableView.rowHeight = UITableViewAutomaticDimension
tableView.estimatedRowHeight = 200
tableView.dataSource = self
tableView.delegate = self
tableView.register(UINib(nibName: homeListCell, bundle: nil), forCellReuseIdentifier: homeListCell)
return tableView
}()
func login(with username: String?, password: String?) {
//
}
if let data = result.data {
//
}
if let name = person.name, let age = person.age {
//
}
// 使用if let as?判断
if let name = person.name as? String {
//
}
// 给name变量设置默认值
var name = person.name ?? ""
var names: [String] = []
var values: [String: Int] = [:]
var person: [String: Any] = [:]
static let homeListCell = "HomeListCell"
class HomeListCell: UITableViewCell {
static let kHomeCellHeight = 80.0
//
}
UIView.animateWithDuration(1.0) {
self.myView.alpha=0
}
func login(with username: String?, password: String?) throws -> LoginError {
guard let username = username else {
throw .noUsername
}
guard let password = password else {
throw .noPassword
}
// 处理登录
}
// 循环
for _ in 0..
enum NetState: CaseIterable {
case wifi
case hotWifi
case mobile
case none
}
for item in NetState.allCases {
print(item)
}
#warning("列表刷新需要优化")
#if os(macOS)
#error("MyLibrary is not supported on macOS.")
#endif
// 判断数组的所有元素是否全部大于80
let scores = [86, 88, 95, 92]
// 返回一个BOOL
let passed = scores.allSatisfy({ $0 > 80 })
print(passed)
// 输出:true
let a = [10, 20, 30, 40, 50, 30, 20]
// 获取满足条件的元素
print(a.last(where: { $0 > 30 })) //50
// 获取满足条件的元素的索引
print(a.lastIndex(where: { $0 > 25 })) //4
// 随机数
let ranInt = Int.random(in: 0..<10)
let ranFloat = Float.random(in: 0..<10)
let a = [10, 20, 30, 40, 50, 30, 20]
// 对数组重新洗牌, 重新随机排序返回一个数组
let shuffled = a.shuffled()
// 获取数组中的一个随机元素,空数组返回nil
let random = a.randomElement()
var names = ["John", "Michael", "Graham", "Andy", "Eric", "Andy"]
names.removeAll { $0.hasPrefix("Andy") }
print(names)
// 输出:["John", "Michael", "Graham", "Eric"]
func dynamicallyCall(withArguments args: [Int]) -> Double
func dynamicallyCall(withKeywordArguments args: KeyValuePairs) -> Double
// 定义方式
@dynamicCallable
struct RandomNumberGenerator {
func dynamicallyCall(withArguments args: [Int]) -> Double {
let numberOfZeroes = Double(args.first ?? 0)
let maximum = pow(10, numberOfZeroes)
return Double.random(in: 0...maximum)
}
}
// 调用方式
let random = RandomNumberGenerator()
let num = random(2)
// random(2)等同于random.dynamicallyCall(withArguments: [2])
enum X {
case foo(bar: [Int])
}
func baz() -> X {
return .foo(bar: [0, 1, 2, 3])
}
let quote = "Alice: \"How long is forever?\" White Rabbit: \"Sometimes, just one second.\""
let rain = #"The "rain" in "Spain" falls mainly on the Spaniards."#
let multiline = #"""
The answer to life,
and everything is \#(answer).
"""#
// 类型: let messages: String?
let messages = try? user?.getMessages()
print(messages ?? "")
let arr = [1, 28, 3, 40, 5, 6]
let count = arr.count(where: { $0 > 10 })
print(count) // 2
compactMap: 返回一个操作后得到的新的数组, 类似flatMap
mapValues: 对字典的value值执行操作, 返回改变value后的新的字典
Swift5.0 新增了一个函数 compactMapValues 返回一个对value操作后的新字典, 并且自动过滤不符合条件的键值对
let guys = [
"Hudson": "30",
"Clarke": "40",
"Robinson": "50",
"Hartis": "DNF"
]
let comMap = guys.compactMapValues({ Int($0) + 3 })
print(comMap)
// ["Clarke": 43, "Robinson": 53, "Hudson": 33]