static let sharedInstance = TheOneAndOnlyKraken()
// 防止外部调用
private init() {} //This prevents others from using the default '()' initializer for this class.
TheOneAndOnlyKraken.sharedInstance
B需要代理,声明以及声明方法func eatMany(food1: String) -> Void
protocol EatFoodDelegate {
func eatMany(food1: String) -> Void
A遵循代理并实现方法
// 第一种设置代理方式
extension ViewController : EatFoodDelegate{
func eatMany(food1 : String) -> Void {
print(food1)
// 第二种设置代理方式, 逗号 + 代理协议
// class ViewController: UIViewController, EatFoodDelegate
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
print("触摸屏幕")
let vcOne = TestOne()
// 设置代理
vcOne.delegate = self
vcOne.strBlock = {(str1 : String, str2 : String) -> Void in
print(str1 + str2)
self.present(vcOne, animated: true) {
print("跳转完成")
回调到控制器A
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
print("触摸屏幕")
let vcOne = TestOne()
// 实现闭包 处理回调
vcOne.strBlock = {(str1 : String, str2 : String) -> Void in
print(str1 + str2)
self.present(vcOne, animated: true) {
print("跳转完成")
声明闭包类型
两个字符串参数, 返回空类型 ?
延迟初始化
var strBlock : ((_ str1 : String, _ str2 : String) -> Void)?
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
// self.dismiss(animated: true) {
// print("控制器消失了")
// }
// 对于当前没有进行初始化的对象选择了optional 即 ? 延迟初始化,需要解包时
// ! 感叹号解包如果对象为空nil Unexpectedly found nil while unwrapping an Optional value
// ? 问号解包 对象为空不崩溃 -建议用?
strBlock?("hello", "world")
let dic = ["name" : "张三", "age" : 18] as [String : Any]
NotificationCenter.default.post(name : NSNotification.Name.init(rawValue: "h"), object: dic)
注册通知 & 接收通知
方法必须是oc
方法 @objc
前缀修饰
通知名字NSNotification.Name(rawValue: "h")
// 添加通知实现同时方法
override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.addObserver(self, selector: #selector(ViewController.hello), name: NSNotification.Name(rawValue: "h"), object: nil)
@objc func hello() -> Void{
print("hello")
通知名字NSNotification.Name.init(rawValue: "h")
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
self.dismiss(animated: true) {
print("控制器消失了")
NotificationCenter.default.post(name : NSNotification.Name.init(rawValue: "h"), object: nil)
deinit {
NotificationCenter.default.removeObserver(self)