Swizzling в Swift 5


#1

Если не трудно, поделитесь примером кода. Надо чтобы этот код заработал в Swift 4.2 хотя бы. А лучше в 5 бете. И если в песочнице он не сработает, хотелось бы узнать почему.


#2

Вопрос снят. (…)


#3

Ахах, а можно пример)
Я просто даже не слышал о таком!
Увидел вопрос, новое слово, загуглил, почитал статью на хабре, звучит круто, можно пример)))


#4

class TestSwizzling : NSObject {
	@objc dynamic func methodOne()->Int{
		return 1
	}
}

extension TestSwizzling {
	
	//In Objective-C you'd perform the swizzling in load(),
	//but this method is not permitted in Swift
	func swizzle(){
		
		let i: () -> () = {
			
			let originalSelector = #selector(TestSwizzling.methodOne)
			let swizzledSelector = #selector(TestSwizzling.methodTwo)
			let originalMethod = class_getInstanceMethod(TestSwizzling.self, originalSelector);
			let swizzledMethod = class_getInstanceMethod(TestSwizzling.self, swizzledSelector)
			method_exchangeImplementations(originalMethod!, swizzledMethod!)
			print("swizzled")
			
		}
		i()
	}
	
	@objc func methodTwo()->Int{
		// It will not be a recursive call anymore after the swizzling
		return 4
	}
}

var c = TestSwizzling()
print([c.methodOne(),c.methodTwo()])
c.swizzle()
print([c.methodOne(),c.methodTwo()])

#5

Я пока сам не начал пробелы закрывать в знаниях многое не слышал. Например, относительно недавно понял, почему на собеседованиях заваливали вопросами чем структуры в Swift лучше классов (или наоборот хуже). Если опять же исключить наследование и необходимость изменять миллиардный массив копируя туда-сюда.


#6

Ну объекты классов передаются по ссылке, а объекты структур передаются копии, это наверн единственная разница!
Меня спрашивали по ООП, полиморфизм в основном, жизненный цикл, реактивщина, знаком или нет) работа с сетью, вот нужно с сокетами поработать!)
Толко найти бы апишку какую, где можно потестить!

И архитектура!!!


#7

Меня наводящими вопросами и завели в тупик. Apple рекомендует использовать структуры. И естественный вопрос, почему? ну, чтоб долго не тянуть. Там все упирается в способы вызовов методов. dispatch methods. И все эти отличия C - obj-c - swift. :slight_smile:
Конечно я в этой теме еще плаваю, но понимание приходит со временем.