环顾堆栈溢出,您会发现许多资源,这些资源包括如何向按钮添加操作,向视图添加操作等。这些资源中的每一个都使用function getInputSum(){
if ( $("#noteInput").checked ){
inputSum = reference
.SumArray(refOctave[getRefOctave()])
.SumArray(refNote[getRefNote()])
.SumArray(refAccidental[getRefAccidental()])
.SumArray(autoOffsetToA)
.SumArray(notes[getNote()])
.SumArray(chromatic[getChromatic()])
.SumArray(octave[getOctave()])
.SumArray(syntonic[getSyntonic()])
.SumArray(septimal[getSeptimal()])
.SumArray(undecimal[getUndecimal()])
.SumArray(tridecimal[getTridecimal()])
.SumArray(seventeen[getSeventeen()])
.SumArray(nineteen[getNineteen()])
.SumArray(twentyThree[getTwentyThree()])
.SumArray(twentyNine[getTwentyNine()])
.SumArray(thirtyOne[getThirtyOne()]);
} else if ( $("#ratioInput").checked ){
smallestTerms = reduce(inputNum,inputDen);
$("#num").text(smallestTerms[0]);
$("#den").text(smallestTerms[1]);
numArray = getArray(smallestTerms[0]);
denArray = getArray(smallestTerms[1]);
inputSum = reference
.SumArray(refOctave[getRefOctave()])
.SumArray(refNote[getRefNote()])
.SumArray(refAccidental[getRefAccidental()])
.SumArray(numArray)
.DiffArray(denArray);
}
}
,因为@objc
是#selectors
代码。但是,我找不到一个资源,没有使用objc
就向视图添加了动作。
将某些内容标记为objc
会使它暴露于objc
运行时,这在使用选择器时是必需的。
从本质上讲,归结为以下问题:
Objective-C
代码的情况下创建动作?
@objc
代码进行操作?@objc
来向视图添加动作?Swift
变体的更新,以向视图添加动作?答案 0 :(得分:2)
目标/选择器机制是UIControl
(和类似的类)在Objective-C甚至是物联网之前很早就被编写的方式。
您的问题对Objective-C同样有效。为什么UIControl
(和类似名称)不提供基于块的API,而不提供过时的目标/选择器模式?
所以这不是更新Swift的问题。将基于块/闭包的API添加到使用目标/选择器模式的相关类中是一个问题。
如果您在GitHub上进行一些搜索,您会发现一个基于闭包的Swift API,它实际上可以实现您想要的。当然,它的实现是使用旧的目标/选择器API。