আমি কীভাবে সুইফটে কোনও প্রকারের জন্য প্রদর্শিত পাঠ্য উপস্থাপনাটি পরিবর্তন করতে পারি?


92

আমি কীভাবে পাঠ্য আউটপুট সংশোধন করতে পারি যা স্ট্রিং অন্তরঙ্গনে প্রদর্শিত হয়?

Printableপ্রোটোকল সবচেয়ে বড় মনে হচ্ছে কিন্তু এটি উভয় স্ট্রিং ক্ষেপক মধ্যে উপেক্ষিত এবং দৃষ্টান্ত মুদ্রণ যখন, যেমন:

struct Point : Printable
{
    var x = 0
    var y = 0

    var description : String {
        return "(\(x), \(y))"
    }

    func toString() -> String {
        return description
    }
}

তেমনি toString()কনভেনশনটিরও কোনও প্রভাব নেই:

var p = Point(x: 10, y: 20)

println(p)                   // V11lldb_expr_05Point (has 2 children)
println("\(p)")              // V11lldb_expr_05Point (has 2 children)
println(p.description)       // (10, 20)
println("\(p.description)")  // (10, 20)

প্লেগ্রাউন্ডে আবার আচরণটি আলাদা হয় যা স্ট্রাইকগুলির জন্য নিজস্ব স্ট্রিং উপস্থাপনা ব্যবহার করে, যেমন:

p // {x 10, y 20}

আমি কীভাবে কোনও পরিবর্তন করতে পারি যে কোনও উদাহরণটি প্রদর্শিত হয় কীভাবে?


উপরের কোডটি Xcode 6.3 বিটা 4
কার্বো 18

উত্তর:


113

সুইফট 2 - 4

সারসংক্ষেপ

সাথে সামঞ্জস্য CustomStringConvertibleপ্রোটোকল এবং অ্যাড description:

var description: String {
    return "description here"
}

উদাহরণ

আপনি কিছু স্ট্রাক্ট তৈরি করতে পারেন:

struct Animal : CustomStringConvertible {
    let type : String

    var description: String {
        return type
    }
}

struct Farm : CustomStringConvertible {
    let name : String
    let animals : [Animal]

    var description: String {
        return "\(name) is a \(self.dynamicType) with \(animals.count) animal(s)."
    }
}

আপনি যদি এগুলি শুরু করেন:

let oldMajor = Animal(type: "Pig")
let boxer = Animal(type: "Horse")
let muriel = Animal(type: "Goat")

let orwellsFarm = Farm(name: "Animal Farm", animals: [oldMajor, boxer, muriel])

কাস্টম বিবরণগুলি আপনার খেলার মাঠে উপস্থিত হবে:

এখানে চিত্র বর্ণনা লিখুন

এটিও দেখুন CustomDebugStringConvertible, যা আপনি ডিবাগিংয়ের সময় আরও ভার্বোস আউটপুট ব্যবহার করতে পারেন।


ব্যবহার নোট

আপনি এই প্রোটোকলটি প্রয়োগ না করে যেString কোনও প্রকার থেকে একটি সূচনা করতে পারেন । উদাহরণ স্বরূপ:

এখানে চিত্র বর্ণনা লিখুন

এই কারণে ডকস বলেছেন:

CustomStringConvertibleজেনেরিক সীমাবদ্ধতা হিসাবে ব্যবহার করা, বা descriptionসরাসরি অনুকরণকারী ধরণের অ্যাক্সেস করা নিরুৎসাহিত করা হয়।


37

প্রাসঙ্গিক অ্যাপল সুইফ্ট ডক্স

অ্যাপল এই উদাহরণটি সরবরাহ করে:

struct MyType: Printable {
    var name = "Untitled"
    var description: String {
        return "MyType: \(name)"
    }
}

let value = MyType()
println("Created a \(value)")
// prints "Created a MyType: Untitled"

আপনি যদি খেলার মাঠে এটি চেষ্টা করেন তবে আপনি যে সমস্যাটি পেয়ে যাচ্ছেন একই সমস্যাটি পাবেন V11lldb_expr...) খেলার মাঠে, আপনি আরম্ভকারীকে কল করার সময় ডানদিকে বর্ণনার বিবরণ পাবেন, কিন্তু এটি printlnসুস্পষ্ট কিছু ফিরিয়ে দেবে না।

খেলার মাঠের বাইরে, তবে, এই কোডটি আপনার প্রত্যাশা মতো আচরণ করে। উপরের অ্যাপল থেকে আপনার কোড এবং নমুনা কোড উভয়ই descriptionযখন কোনও খেলার-মাঠের প্রসঙ্গে ব্যবহৃত হয় তখন সঠিক মুদ্রণ করে।

আমি মনে করি না আপনি খেলার মাঠে এই আচরণটি পরিবর্তন করতে পারবেন। এটি ঠিক একটি বাগও হতে পারে।

সম্পাদনা : আমি নিশ্চিত যে এটি একটি বাগ; আমি অ্যাপলের কাছে একটি বাগ রিপোর্ট জমা দিয়েছি।

আপডেট : সুইফট 2 এ পরিবর্তে Printable, CustomStringConvertible( প্রাসঙ্গিক ডক লিঙ্ক ) ব্যবহার করুন

struct MyType: CustomStringConvertible {
    var name = "Untitled"
    var description: String {
        return "MyType: \(name)"
    }
}

let value = MyType()
println("Created a \(value)")
// prints "Created a MyType: Untitled"

2

এটি খেলার মাঠে একটি ত্রুটি বলে মনে হচ্ছে। আপনি যদি প্রকৃতপক্ষে প্রোগ্রামটি সংকলন ও পরিচালনা করেন তবে এটি মুদ্রণ করে:

(10, 20)
(10, 20)
(10, 20)
(10, 20)

প্রত্যাশিত.

আপনার এটি https://bugreport.apple.com এ প্রতিবেদন করা উচিত


1

সুইফ্ট 5+ এর বিকল্প হিসাবে আপনি স্ট্রিং.স্ট্রিংইন্টারপোলেশন প্রসারিত করতে পারেন

struct Point {
    var x : Int
    var y : Int
}

extension String.StringInterpolation {
    mutating func appendInterpolation(_ value: Point) {
        appendInterpolation("\(value.x):\(value.y)")
    }
}

এই জন্য মান পরিবর্তন করতে হবে print("\(p)") কিন্তু না জন্য print(p)- যা এখনও বিবরণ ব্যবহার করবে


0

আপনি কনসোলটি খুললে দেখুন: দেখুন -> সহকারী সম্পাদক -> সহকারী সম্পাদক দেখান আপনি প্রত্যাশিত প্রিন্ট লাইনগুলি দেখতে পাবেন যোসিমাইট 10.10 সহ এক্সকোড 6.3.2 এ চেক করা হয়েছে

এখানে চিত্র বর্ণনা লিখুন


0

AppCodeসরবরাহ করে একটি Generate| debugDescriptionএবং `` জেনারেট | বর্ণনা`। অনেক সদস্যের সাথে একটি কাঠামোর জন্য এগুলি টাইপ করে দেয়

এখানে চিত্র বর্ণনা লিখুন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.