swift入门仿写项目及遇坑出坑

  • 初学swift,找来一个项目拿来练手。下面是几个效果图->
    项目源码☞传送门https://github.com/SPIREJ/XSLC_Swift

  • 首页:

    • 首页主要由banner、collectionView、tableView 组成
首页
  • 理财页
    • 理财列表页、计划详情页以及键盘等
理财
  • 我的页
    • collectionView 、webView
swift入门仿写项目及遇坑出坑_第1张图片
我的
  • 初学者,UI就这么多,就说说遇到的两个坑吧~
第一个坑,使用pod建立工程时终端出错
pod[!] Unable to add a source with url `https://github.com/CocoaPods/Specs.git` named `master`.You can
 try adding it manually in `~/.cocoapods/repos` or via `pod repo add`.

解决方案:终端输入以下命令

pod repo add master https://github.com/CocoaPods/Specs.git

然后提示执行

pod setup

如果出现

pod[!] The `master` repo is not a git repo.

进入/users/你的用户名/.cocoapods/repos,删除master文件夹然后执行,如我这么进入

cd ~/.cocoapods/repos/

master文件夹是个目录,删除时需要连下面的分支一起删掉

rm -rf ~/.cocoapods/repos/master

删除master之后,再pod setup,之后配置好你的Podfile,最后pod install就成功的建立了 同名的.xcworkspace工程了

pod setup
#先 cd 到你工程的目录
pod init
open -a Xcode Podfile
#添加你需要的三方库
pod install
  • 还有以下情况:
    如果是安装多个Xcdoe,还需要选择Xcode的路径,后面是你自己的Xcode路径,显示Xcode包内容可查看
sudo xcode-select -switch /Applications/Xcode.app/

在终端里输入下方命令可以知道Xcode的路径:

xcode-select -p
第二个坑,加载基于XIB创建的自定义控件时报错
  • 我像写OC的基于XIB自定义控件一样,创建一个基于UIView的新类XSCustomView

    swift入门仿写项目及遇坑出坑_第2张图片
    创建基于UIView的新类XSCustomView

  • 创建一个同名的XIB文件

    swift入门仿写项目及遇坑出坑_第3张图片
    创建一个同名的XIB文件

  • 像OC一样给文件指定类


    swift入门仿写项目及遇坑出坑_第4张图片
    像OC一样给文件连线
  • 然后加载View就会出错

fatal error: init(coder:) has not been implemented: file 
/路径/XXX.swift, line 43
(lldb)
  • 解决办法,查了好久资料,找到解决办法
    swift指定类与OC略有不同,swift需要的是File's Owner归属于咱们定义的哪个类,而下面的View是不需要指定类的

    swift入门仿写项目及遇坑出坑_第5张图片
    解决问题

  • 最后咱们从XIB加载View即可,如在custom.swift文件里有如下代码

class XSCustomView: UIView {
    
    var contentView:UIView!
    
    override func awakeFromNib() {
        super.awakeFromNib()
    }
    
    override init(frame: CGRect) {
        super.init(frame: frame)
        contentView = loadFromNib()
        addSubview(contentView)
    }
    
    func loadFromNib() -> UIView {
        return Bundle.main.loadNibNamed("XSCustomView", owner: nil, options: nil)?.first as! UIView
    }
    
    override func layoutSubviews() {
        contentView.frame = bounds
    }
    
    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        fatalError("init(coder:) has not been implemented")
    }
}

你可能感兴趣的:(swift入门仿写项目及遇坑出坑)