I am trying to replace some strings which pickup from proxy, and I already run this code, give me no error. but actually it just doesn't work. I don't know where I am doing wrong. actually in simulator, the interface can be displayed, but when I click the button, caused crash.
OS Platform: Mac OS 12.5.1
Xcode version: Version 13.4.1
Swift Version: Swift 5
import UIKit
import Foundation
import AudioToolbox
import SwiftUI
class KeyboardViewController: UIInputViewController {
var Yuanyin:String!
var bianyuanyin:String!
var bufferletters:Substring!
private var proxy: UITextDocumentProxy {
return textDocumentProxy
}
@IBAction func keypressed(sender: UIButton) {
// insert text
let character = sender.titleLabel!.text!
proxy.insertText(character)
// check shiftStatus
if shiftStatus == 1 {
shiftbuttonpressed(self.ShiftButton)
}
// replace letters with tones
let Str3 = proxy.documentContextBeforeInput
let Last3Letter = Str3!.suffix(3)
let Str2 = proxy.documentContextBeforeInput
let Last2Letter = Str2!.suffix(2)
let Str1 = proxy.documentContextBeforeInput
let LastLetter = Str1!.suffix(1)
if (LastLetter.range(of: "ɑ", options: .regularExpression) != nil)
{
deleteletters = 1
replaceletters()
bianyuanyin = "ɑ"
bufferletters = LastLetter
}
//replace lastletter // uppercased
if (Last2Letter.range(of: "UN", options: .regularExpression) != nil)
{
deleteletters = 2
replaceletters()
bianyuanyin = "U"
bufferletters = Last2Letter
}
func replaceletters(){
let Yuanyin = bianyuanyin
let Bianxing1 = (Yuanyin ?? "") + "\u{0304}"
let Bianxing2 = (Yuanyin ?? "") + "\u{0301}"
let Bianxing3 = (Yuanyin ?? "") + "\u{030C}"
let Bianxing4 = (Yuanyin ?? "") + "\u{0300}"
Tone1Button.titleLabel?.text = bufferletters.replacingOccurrences(of: (Yuanyin ?? ""), with: Bianxing1)
Tone2Button.titleLabel?.text = bufferletters.replacingOccurrences(of: (Yuanyin ?? ""), with: Bianxing2)
Tone3Button.titleLabel?.text = bufferletters.replacingOccurrences(of: (Yuanyin ?? ""), with: Bianxing3)
Tone4Button.titleLabel?.text = bufferletters.replacingOccurrences(of: (Yuanyin ?? ""), with: Bianxing4)
Tone1Button.setTitle(Tone1Button.titleLabel?.text, for: UIControl.State.normal)
Tone2Button.setTitle(Tone2Button.titleLabel?.text, for: UIControl.State.normal)
Tone3Button.setTitle(Tone3Button.titleLabel?.text, for: UIControl.State.normal)
Tone4Button.setTitle(Tone4Button.titleLabel?.text, for: UIControl.State.normal)
}
}